Когда мы работаем с php, то почти всегда имеем дело с массивами. А операция объединения массивов – это то, что приходится проделывать довольно часто.
При этом мы можем хотеть объединять массивы с заменой элементов, у которых встречаются одинаковые ключи
- у первого массива
- или у второго;
- а возможно нам нужно, чтобы значения элементов одного массива стали ключами, а второго значениями.
Сегодня мы рассмотрим все эти варианты.
Существует несколько способов объединения массивов в php, но каждый из них может дать разные результаты. Очень важно хорошо осознавать, что и для чего вы делаете. От этого будет зависеть стабильность работы вашей программы.
На протяжении всего поста я буду рассматривать массивы, в каждом из которых 1 элемент имеет идентичный с элементом другого массива строковый ключ. Это важно, потому что при разных способах объединения мы будем получать разные результаты.
Объединение массивов без переиндексации
Чтобы объединить 2 или более массивов можно использовать оператор “+”.
При этом, если во втором массиве встретится элемент с ключом, который имеет элемент из первого массива, то элемент второго массива будет проигнорирован (или выброшен). Давайте посмотрим.
<?php $arr1 = [ "name" => "Anna", "age" => 34, "weight" => 52, ]; $arr2 = [ "name" => "Robinzon", "surname" => "Kruzo", ]; $result = $arr1 + $arr2; var_dump($result); ?>
А вот, что мы увидим на экране:
array(4) { ["name"]=> string(4) "Anna" ["age"]=> int(34) ["weight"]=> int(52) ["surname"]=> string(5) "Kruzo" }
Как видно элемент из второго массива с ключом “name” был проигнорирован и не попал в результирующий массив.
Объединение массивов с помощью array_merge
Объединить массивы можно при помощи функции array_merge. В этом случае при совпадении строкового ключа второго массива с ключом первого, будет перезаписано значение элемента первого массива.
Обратите внимание, что это относится только к строковым ключам. В случае числовых ключей (если они идентичны) последнее значение будет добавлено в конец результирующего массива.
Чтобы все это увидеть, я немного модифицирую массивы, добавив им также по элементу с одинаковыми числовыми ключами.
<?php $arr1 = [ "name" => "Anna", "age" => 34, "weight" => 52, 1 => "girl", ]; $arr2 = [ "name" => "Robinzon", "surname" => "Kruzo", 1 => "boy" ]; $result = array_merge($arr1, $arr2); var_dump($result); ?>
А результат будет вот таким:
array(6) { ["name"]=> string(8) "Robinzon" ["age"]=> int(34) ["weight"]=> int(52) [0]=> string(4) "girl" ["surname"]=> string(5) "Kruzo" [1]=> string(3) "boy" }
Как видите, элемент с ключом “name” добавился из второго массива, а элементы с числовыми индексами переиндексировались и оба оказались в массиве результата.
Объединение двух массивов в один ассоциативный
Сейчас посмотрим, как можно объединить 2 массива так, чтобы значения одного из них стали ключами, а значения второго – значениями.
Здесь нам поможет функция array_combine.
Она принимает 2 параметра:
- первый – массив, из которого будут созданы ключи,
- второй – массив, из которого будут созданы значения.
Количество элементов в массивах должно совпадать, иначе, вместо массива с результатом вы получите false.
Давайте модифицируем наши массивы и посмотрим, как это работает.
<?php $arr1 = [ "name" => "Anna", "age" => 34, "country" => "Russia", ]; $arr2 = [ "surname" => "Kruzo", "date_of_birth" => "03.06.1986", "city" => "St.Peter" ]; $result = array_combine($arr1, $arr2); var_dump($result); ?>
Результатом этого кода будет следующий массив:
array(3) { ["Anna"]=> string(5) "Kruzo" [34]=> string(10) "03.06.1986" ["Russia"]=> string(8) "St.Peter" }
Как видите, значения первого массива стали ключами, а значения второго – значениями элементов нового массива.
Надеюсь этот пост оказался вам полезным и теперь вы точно знаете все нюансы при объединении массивов в php.
В качестве благодарности ставьте лайки и оставляйте комментарии ))
Также можете подписаться на обновления и всегда быть в курсе новых постов. Здесь никакого спама – только полезное. Форма поиска в сайдбаре справа.
Анна здравствуйте. А как можно связаться с вами? Получить платную консультацию по программированию? В частности делаю свой первый сайт, есть несколько вопросов, не знаю к кому обратиться за помощью, а у вас тут как раз статья есть по теме, но не могу сам разобраться. Напишите пожалуйста вашу почту или соцсети куда вам написать можно?
Здравствуйте! Можете написать мне на эту почту annakotelnikova25@gmail.com
“Обратите внимание, что это относится только к строковым ключам. В случае числовых ключей (если они идентичны) последнее значение будет добавлено в конец результирующего массива.”
Вот за это спасибо!) Век живи – век учись