2013-08-16 2 views
1

Как увеличить (добавить больше значений) в массив с парами значений ключа в цикле.Инкремент php-массива с парами значений ключа в цикле

$field['choices'] = array(
    'custom' => 'My Custom Choice' 
); 

Скажем, я хочу добавить еще три варианта из другого массива?

Выход я хочу добиться:

$field['choices'] = array(
    'custom1' => 'My Custom Choice1' 
    'custom2' => 'My Custom Choice2' 
    'custom3' => 'My Custom Choice3' 
    'custom4' => 'My Custom Choice4' 
); 
+0

Могли бы вы привести пример вывода о том, что вы пытаетесь достичь? – Vulcan

+0

Обновлен мой вопрос. –

+0

Ваш пример не соответствует вашему описанию. Вы начали с ключа 'custom', но где это в результате?Вы сказали, что хотите добавить 3 элемента, но вместо этого вы удалили 1 и добавили 4. – Barmar

ответ

1

Итерация и сцепить индекс к префиксу в вашем ключе:

for ($i = 2; $i <= 4; $i++) { 
    $field['choices']['custom' . $i] = 'My Custom Choice' . $i; 
} 
+0

Спасибо, Бармар. У меня возникли проблемы с выяснением синтаксиса. Но, как вы и два других ответа показывают ... это работает> $ field ['choice'] ['custom'. $ i] = 'Мой пользовательский выбор'. $ Я; –

+0

Если вам нужна переменная (или ключ, если на то пошло) с именем SomethingN, вам нужен (внутренний) массив. Кроме того, OP сказал, что он добавляет другие варианты из другого массива. –

+0

@ MadaraUchiha Он сказал это, но ничто другое в его вопросе не поддерживает это. Я спросил его о другом массиве, он никогда не отвечал. Но я согласен, что всякий раз, когда вы увеличиваете такие строки, это настоятельно предполагает, что вы должны использовать числовой подматрица. – Barmar

0

Вы можете использовать array functions для сортировки или слияния.

Или вы можете сделать что-то вроде этого:

$field['choices']['custom'] = 'My Custom Choice'; 
$field['choices']['custom2'] = 'My Custom Choice'; 
$field['choices']['custom3'] = 'My Custom Choice'; 
$field['choices']['custom4'] = 'My Custom Choice'; 
+0

Это работает, но он сказал, что хочет получить эти другие варианты «из другого массива». –

+0

Вот почему я предложил сначала функции массива. –

0

Вы хотели бы использовать array_merge().

Из инструкции:

array array_merge (array $array1 [, array $... ]) 

Объединяет элементы одного или более массивов таким образом, что значения одного добавляются к концу предыдущего. Он возвращает итоговый массив .

Если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа перезапишет предыдущий. Если, однако, массивы содержат числовые клавиши, более позднее значение не будет перезаписывать исходное значение , но будет добавлено.

+0

Какой еще массив он объединяет? – Barmar

+0

@Barmar: Тот, на который он добавляет три других варианта. См. Вопрос. –

0

Как было указано в вашем вопросе:

$field['choices'] = array(
    'custom' => 'My Custom Choice' 
); 

Итак:

$array = $field['choices']; 

для упрощения приведенного ниже примера:

$otherArray = range(1, 3); // another array with 3 values 

$array += $otherArray; // adding those three values (with _different_ keys) 

сделано. Оператор + с массивами называется объединением. Вы находите, что описываемая здесь:

Так что, пока другой массив вы хотите добавить три различных ключа по сравнению с одного массива вы добавляете его, вы можете использовать оператор + ,

0

Вот код, я хотел бы использовать, чтобы добавить $otherArray значения в массив значения ключа пользовательского приращения

if (count($field['choices']) === 1) { 
    $field['choices']['custom1'] = $field['choices']['custom']; 
    unset($field['choices']['custom']; 
    $i = 2; 
} else { 
    $i = count($field['choices']) + 1; 
}//END IF 
foreach ($otherArray as $key => $val) { 
    $field['choices']['custom' . $i] = $val;//Where val is the value from the other array 
    $i++; 
}//END FOREACH LOOP 
Смежные вопросы