PHP добавляет ассоциативный массив с буквенными ключами?

112

Можно ли добавить к ассоциативному массиву буквальные пары ключ => значение? Я знаю, что array_unshift () работает с числовыми клавишами, но я надеюсь на то, что будет работать с буквальными клавишами.

В качестве примера я бы хотел сделать следующее:

$array1 = array('fruit3'=>'apple', 'fruit4'=>'orange');
$array2 = array('fruit1'=>'cherry', 'fruit2'=>'blueberry');

// prepend magic

$resulting_array = ('fruit1'=>'cherry', 
                    'fruit2'=>'blueberry', 
                    'fruit3'=>'apple', 
                    'fruit4'=>'orange');
Колин Брок
источник

Ответы:

220

Разве ты не можешь просто сделать:

$resulting_array = $array2 + $array1;

?

Cletus
источник
15
См. Также array_merge () и его отличие от использования оператора +: br.php.net/manual/en/function.array-merge.php#92602
Havenard 03
2
@cletus: Блин. Да, я могу. Не уверен, что заставило меня подумать, что я не могу или что не работало раньше. Спасибо за ответ.
Колин Брок,
Стоит отметить разницу, но эта разница важна для сохранения числовых ключей, и этот массив представляет собой «чистый» ассоциативный массив со строковыми ключами.
cletus
29

Ответ - нет. Вы не можете добавить к ассоциативному массиву пару "ключ-значение".

Однако вы можете создать новый массив, содержащий новую пару «ключ-значение» в начале массива, с помощью оператора объединения +. Результатом является совершенно новый массив, а создание нового массива имеет сложность O (n).

Синтаксис ниже.

$new_array = array('new_key' => 'value') + $original_array;

Примечание: не используйте array_merge (). array_merge () перезаписывает ключи и не сохраняет числовые ключи.

PHPguru
источник
"перезаписывает ключи и не сохраняет числовые" ... а) как оператор объединения ("+") обрабатывает "повторяющиеся" ключи? re: не сохранять цифровые клавиши: вероятно, желательно
Брэд Кент
16

В вашей ситуации вы хотите использовать array_merge ():

array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'apple', 'fruit4'=>'orange'));

Чтобы добавить одно значение для ассоциативного массива вместо array_unshift (), снова используйте array_merge ():

array_merge(array($key => $value), $myarray);
мвпетрович
источник
5

@Cletus на высоте. Чтобы добавить, если порядок элементов во входных массивах неоднозначен и вам нужно отсортировать окончательный массив, вы можете захотеть ksort :

$resulting_array = $array1 + $array2;
ksort($resulting_array);
karim79
источник
4
В качестве позднего примечания ksortвозвращает логическое значение, поэтому приведенное выше должно быть выполнено как два оператора, а не один, например $a = $array1 + $array2; ksort($a);, в противном случае $resulting_arrayбудет логическое значение, а не массив, который вы ожидали.
Эль Йобо
3

Используя тот же метод, что и @mvpetrovich, вы можете использовать сокращенную версию массива, чтобы сократить синтаксис.

$_array = array_merge(["key1" => "key_value"], $_old_array);

Ссылки:

PHP: array_merge ()

PHP: массивы - Руководство

Начиная с PHP 5.4 вы также можете использовать синтаксис коротких массивов, который заменяет array () на [].

Брайс Гоф
источник