Как объединить 2 массива в php

/ 👁 1099

Когда мы работаем с 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.

В качестве благодарности ставьте лайки и оставляйте комментарии ))

Также можете подписаться на обновления и всегда быть в курсе новых постов. Здесь никакого спама — только полезное. Форма поиска в сайдбаре справа.

2 комментария

  1. Лев 12.06.2020

Leave a Reply