Ответ 1
Не можете ли вы просто сделать:
$resulting_array = $array2 + $array1;
?
Можно ли добавить ассоциативный массив с буквальными ключами = > парами значений? Я знаю, что 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');
Не можете ли вы просто сделать:
$resulting_array = $array2 + $array1;
?
Ответ - нет. Вы не можете добавить ассоциативный массив с парой ключ-значение.
Однако вы можете создать новый массив, содержащий новую пару ключ-значение в начале массива с оператором объединения +
. Результатом является совершенно новый массив, хотя и создание нового массива имеет сложность O (n).
Синтаксис ниже.
$new_array = array('new_key' => 'value') + $original_array;
Примечание. Не используйте array_merge(). array_merge() перезаписывает ключи и не сохраняет цифровые клавиши.
В вашей ситуации вы хотите использовать array_merge():
array_merge(array('fruit1'=>'cherry', 'fruit2'=>'blueberry'), array('fruit3'=>'apple', 'fruit4'=>'orange'));
Чтобы добавить одно значение, для ассоциативного массива вместо array_unshift() снова используйте array_merge():
array_merge(array($key => $value), $myarray);
@Cletus находится на месте. Просто добавьте, если упорядочение элементов во входных массивах неоднозначно, и вам нужен окончательный массив для сортировки, вы можете захотеть ksort:
$resulting_array = $array1 + $array2;
ksort($resulting_array);
Используя тот же метод, что и @mvpetrovich, вы можете использовать сокращенную версию массива для сокращения синтаксиса.
$_array = array_merge(["key1" => "key_value"], $_old_array);
Рекомендации:
Начиная с PHP 5.4 вы также можете использовать синтаксис короткого массива, который заменяет array() на [].