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');

Відповіді:


219

Ви не можете просто зробити:

$resulting_array = $array2 + $array1;

?


15
Дивіться також array_merge () та його відмінність від використання оператора +: br.php.net/manual/en/function.array-merge.php#92602
Havenard

2
@cletus: Sheesh. Так, я можу. Не впевнений, що змусило мене думати, що я не міг або що не працював раніше. Дякуємо за відповідь.
Колін Брок

Варто зазначити різницю, але ця різниця є актуальною для збереження числових ключів, і цей масив є "чистим" асоціативним масивом зі строковими ключами.
клент

29

Відповідь - ні. Не можна додати асоціативний масив з парою ключ-значення.

Однак ви можете створити новий масив, який містить нову пару ключ-значення на початку масиву з оператором об'єднання +. Результат - це абсолютно новий масив, але створення нового масиву має O (n) складність.

Синтаксис знаходиться нижче.

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

Примітка. Не використовуйте array_merge (). array_merge () перезаписує клавіші і не зберігає числові клавіші.


"перезаписує ключі та не зберігає числові ключі" ... а) як оператор об'єднання ("+") обробляє "дублюючі" ключі? 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);

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, ви також можете використовувати синтаксис короткого масиву, який замінює масив () на [].

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.