Сложение массивов в PHP
Некоторые ребята не знают, что в ПХП есть операция «плюс» над массивами, а открыв её для себя случайным чтением инструкции по языку, не знают чем она отличается от array_merge. Между тем отличия разительные, если их не знать, легко наплодить ошибок в коде.
Операция сложения («плюс») с массивами работает проще всего: если в левом массиве уже есть значение с таким ключом, оно и остаётся:
["L"] + ["R"]; // будет ["L"]
["a" => "L"] + ["a" => "R", "b" => "R"]; // будет ["a" => "L", "b" => "R"]
Операция слияния массивов (array_merge) работает по-разному в зависимости от типа ключей массива. Значения со строковыми ключам правого массива перезаписывают значения левого с тем же ключём, а значения с целыми добавляются в конец левого.
array_merge(["L"], ["R", 4 => "R"]); // ["L", "R", "R"], значения целых ключей правого массива потерялись, сам массив добавился в конец
array_merge(["a" => "L"], ["a" => "R"]); // ["a" => "R"], совпадение строковых ключей
array_merge(["L", "a" => "L"], ["R", "a" => "R", 4 => "R"]); // ["L", "a" => "R", "R", "R"], разные типы ключей вместе
Операция «плюс» очень полезна для добавления группы ключей строковых со значениями (для объединения ассоциативных массивов):
$arr = ["key1" => "value1", "key2" => "value2"];
// вместо
$arr["key3"] = "value3";
$arr["key4"] = "value4";
// проще написать так:
$arr += ["key3" => "value3", "key4" => "value4"];
Но на этом её применение не заканчивается, конечно.
Разве будет не: «[„a“ => „L“, „b“ => „R“]»?
Комментарий для Svan:
Всё верно, в последнюю минуту заменил цифры на L и R и опечатался.
Надо отметить, что в общем случае теряются ключи всех массивов, т. к. идет перенумерация с 0. В этом частном случае теряются только правого, да.
Комментарий для smikera:
Да, хорошее замечание, я этот случай не рассмотрел.
Еще немного некорректно написано про перезаписывание значений со строковыми ключами. Если в строке число, срабатывает как целочисленное:
А нет, вру, это на уровне объявления массива ключи в целочисленные переводятся.
Комментарий для Евгения Степанищева:
А с какого возраста в вашем окружении перестают в подобных ситуациях употреблять «ребята»? Разве так говорят мужики?
Комментарий для Сергей:
А это возраст определяет? Что такое «моё окружение»? Я, по-вашему, мужик?