PHP ключ в массиве не заменятся

157
05 марта 2019, 20:50

Почему в первом коде "1" ключ не заменяется, а втором элемент "b" заменяется?

<?php
$inventory = [
    "0" => ["sku" => "81231846523248", "name" => "Spilvens", "price" => "12.99"],
    "1" => ["sku" => "84751530004684", "name" => "Pleds", "price" => "24.99"],
    "2" => ["sku" => "81474113134254", "name" => "Aizkari", "price" => "19.99"],
    "3" => ["sku" => "84554454386186", "name" => "Veļas grozs", "price" => "29.99"],
    ];
$replace_inv = ["0" => ["sku" => "81231846523248", "name" => "Spilvens HOME", "price" => "14.99"]];
$inventory = array_merge($inventory, $replace_inv);
echo $inventory["0"]["name"];
?>
<!-- Второй код -->
<br>
<?php
$a = [
"a" => ["sku" => "81231846523248", "name" => "Spilvens", "price" => "12.99"],
"b" => ["sku" => "81231846523248", "name" => "Spilvens", "price" => "12.99"]
];
$b = ["b" => ["sku" => "81231846523248", "name" => "Spilvens HOME", "price" => "14.99"]];
$a = array_merge($a, $b);
echo $a["b"]["name"];   
?>'

Отличие от "подобного" вопроса - он блин другой.

Answer 1

читаем документацию к array_merge

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

Напомню также, что помимо функции объединения есть и оператор объединения +.

Если вы хотите дополнить первый массив элементами второго без перезаписи элементов первого массива и без переиндексации, используйте оператор объединения массивов +:

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

Так что поведение, которого вы хотите добиться будет простым:

$inventory = $replace_inventory  + $inventory;
READ ALSO
Nginx, как сделать корневую папку проекта &ldquo;public&rdquo;?

Nginx, как сделать корневую папку проекта “public”?

Есть проект на Laravel, закинул его на сервер "Nginx" как сделать корневую папку "Public"? Вот сам файл nginxconf

200
Количество цифр в целой части

Количество цифр в целой части

Как во время компиляции узнать количество цифр в целой части числа?

167
C++, как сделать строку нечитаемой в hex [закрыт]

C++, как сделать строку нечитаемой в hex [закрыт]

Есть программа в которой определяется переменная типа stringПосле ее определения в hex editor'е присутствует эта строка

150
Извлечь последний элемент множества

Извлечь последний элемент множества

Как извлечь последний элемент std::set?

174