Как объединить два массива php
Перейти к содержимому

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

  • автор:

Как объединить два массива (PHP)

Чтобы объединить два и более массива в один нужно использовать функцию array array_merge ( array array1, array array2 [, array . ] ) . Функция принимает в качестве параметров два и более количество массивов и возвращает один общий массив.

Пример

Например есть два массива, нужно объединить их в один.

‘; print_r($new_array); echo ‘‘; ?>

Результат

В результате на экране вы увидите.

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 8 [5] => 9 [6] => 14 [7] => 25 [8] => 2 [9] => 5 [10] => 3 [11] => 4 [12] => 7 [13] => 10 [14] => 14 [15] => 56 [16] => 84 [17] => 25 )

Примечание

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

✖ ❤ Мне помогла статья нет оценок
17042 просмотра 1 комментарий Артём Фёдоров 03 марта 2012

Категории

Читайте также

  • Поменять местами 2 элемента массива (PHP)
  • Получить последнее значение массива (PHP)
  • Получить первое значение массива (PHP)
  • Элементы массива в случайном порядке (PHP)
  • Найти и удалить элемент массива (PHP)
  • Умножить массив на число (PHP)
  • Получить последовательность элементов массива (PHP)
  • Удалить пустые элементы из массива (PHP)
  • Случайный элемент массива (JavaScript)
  • Количество элементов ассоциативного массива (JavaScript)
  • Массив уникальных значений (JavaScript)
  • Преобразовать массив в объект (PHP)

Комментарии

Green Fox 11 февраля 2015 в 01:29

А как удалить одинаковые данные из массивов при слиянии ?
т.е не оставить 1 значение, а полностью удалить данные.

Написать комментарий
© Экспэнч 2010-2024
При полном или частичном копировании статей сайта указывайте пожалуйста ссылку на источник
Хотите узнать больше информации, пишите на: artem@expange.ru

Вход на сайт

Введите данные указанные при регистрации:

Социальные сети

Вы можете быстро войти через социальные сети:

Способы слияния массивов в PHP

Работа с массивами является неотъемлемой частью жизни PHP-разработчика. В массивы поступают выборки данных из БД, результаты чтения файлов и обращений к внешним API — список таких операций весьма велик.

Крайне часто необходимо сливать несколько массивов в результирующий с различными артефактами на выходе. Рассмотрим способы слияния и их отличия.

Классический. Пожалуй, самый распространенный способ, знакомый всем и каждому. Функция array_merge решает нашу проблему в случаях, когда нет необходимости следить за изменением или неизменностью числовых ключей массива.

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

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

Слияние с заменой значений. Функция array_replace также позволяет сохранить числовые ключи, при этом заменяя значение в исходном массиве значениями из других переданных массивов в случае совпадения ключей.

Оценить разницу в работе трех способов слияния можно в «песочнице».

14 декабря 2020 • Скопировать ссылку Ссылка скопирована

  • Копировать ссылку
  • Telegram
  • Vkontakte
  • Поделиться

Функция array_merge_recursive в PHP

Функция array_merge_recursive в PHP

Если поднять вопрос об интересных и не совсем сходу понятных функциях, то я бы назвал array_merge_recursive .

На первый взгляд кажется что функция соединяет вроде бы как многомерные массивы, ведь для обычных уже есть array_merge или оператор + или оператор spread(. ).

Но если вы хотите все же соединить два многомерных массива в PHP, вы все равно должны использовать array_merge , а не array_merge_recursive . Почему?

Давайте сначала поймем, что array_merge_recursive делает, например, возьмем эти два массива:

$first = [ 'key' => 'какое-то значение' ]; $second = [ 'key' => 'другое значение' ];
array_merge_recursive($first, $second); // [ // 'key' => [ // 'какое-то значение', // 'другое значение', // ], // ]

Вместо того, чтобы переопределить исходное значение под ключом key как это бы сделал array_merge и (. ) или пропустил бы ( + ) — array_merge_recursive создал массив с исходным и новым значением в нем.

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

$first = [ 'key' => ['какое-то значение'] ]; $second = [ 'key' => 'другое значение' ];

В этом случае array_merge_recursive возьмет значение из $second массива и добавляет его к значению в $first массиве, который сам уже был массивом:

array_merge_recursive($first, $second); // [ // 'key' => [ // 'какое-то значение', // 'другое значение', // ], // ]

Самое важное, что ключ должен иметь одинаковые строковые ключи, если массивы имеют одинаковые числовые ключи, каждое последующее значение не заменит исходное значение, а будет добавлено в конец массива. Рассмотрим более сложный пример:

$first = [ 42, 'color' => ['green', 'red', 'blue'] ]; $second = [ 42, 'color' => 'black' ]; $third = [ 42, 'color' => [ 'black' => 1 ] ]; $fourth = [ 'color' => [ 'black' => [2,3,4] ], 42 ]; array_merge_recursive($first, $second, $third, $fourth); //Array //( // [0] => 42 // [color] => Array // ( // [0] => green // [1] => red // [2] => blue // [3] => black // [black] => Array // ( // [0] => 1 // [1] => 2 // [2] => 3 // [3] => 4 // ) // // ) // // [1] => 42 // [2] => 42 // [3] => 42 //)

Как можно заметить значения 42 просто добавляется в массив каждый раз, как встречается, ключ color объединил значения цветов, а black так же рекурсивно собрал все значения.

А какие функции в PHP вы бы назвали интересными?
cddolordff

Как объединить значения двух массива в один на PHP?

Доброго времени суток!
Как объединить 2 массива в один?

$arr_1 = ' < "description": "DESC", "affter": < "text": "TEXT" >>';
$arr_2 = ' < "name": "Название", "description": "Описание", "affter": < "text": "после", "icon": "иконка до" >>';

Нужно получить

$arr_all = ' < "name": "Название", "description": "DESC", "affter": < "text": "TEXT", "icon": "иконка до" >>';

array_merge() , array_merge_recursive(), array_replace(), array_combine() — не работают ((

  • Вопрос задан более трёх лет назад
  • 225 просмотров

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

Простой 2 комментария

FanatPHP

откуда массивы, зачем «объединять», почему ты называешь переписывание значения объединением?

FanatPHP

да, и почему у тебя здесь строки а не массивы?
Решения вопроса 1
Меня невозможно остановить, если я смогу начать.

Для начала стоит понимать что в вопросе $arr_1 и $arr_2 это не массивы PHP, а строки.
А получить желаемый результат можно буквально так:

 >'; $arr_2 = ' < "name": "Название", "description": "Описание", "affter": < "text": "после", "icon": "иконка до" >>'; $arr_1 = json_decode($arr_1, true); $arr_2 = json_decode($arr_2, true); $arr_all = [ "name" => $arr_2["name"], "description" => $arr_1["description"], "affter" => [ "text" => $arr_1["affter"]["text"], "icon" => $arr_2["affter"]["icon"], ], ]; $arr_all = json_encode($arr_all, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT); echo $arr_all;

spoiler

5fa15022066b5309899913.png

Ответ написан более трёх лет назад
forwox @forwox Автор вопроса

Да, массивы представил в наглядном виде в JSON
В массив переводятся так, правильно

$arr_1 = json_decode($arr_1, true);
$arr_2 = json_decode($arr_2, true);

А вот дальше всё абсолютно не подходит, т.к. вручную подставлять не вариант. Ни когда не понятно сколько и какие будут ключи. Грубо говоря один массив это шаблон со всеми ключами и дефолтными значениями, другой массив уже рабочий. А нужно создать 3 массив где дефолтные значения будут заменены рабочими.

Ответы на вопрос 1

artzolin

php, WordPress разработка сайтов artzolin.ru

$arr_1 = ' < "description": "DESC", "affter": < "text": "TEXT" >>'; $arr_2 = ' < "name": "Название", "description": "Описание", "affter": < "text": "после", "icon": "иконка до" >>'; $arr_1 = json_decode( $arr_1, true ); $arr_2 = json_decode( $arr_2, true ); $arr_all = array_replace_recursive( $arr_2, $arr_1 ); var_dump( $arr_all );

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *