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

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

  • автор:

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

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

$a = array( «a» => «яблоко» , «b» => «банан» );
$b = array( «a» => «груша» , «b» => «клубника» , «c» => «вишня» );

$c = $a + $b ; // Объединение $a и $b
echo «Объединение \$a и \$b: \n» ;
var_dump ( $c );

$c = $b + $a ; // Объединение $b и $a
echo «Объединение \$b и \$a: \n» ;
var_dump ( $c );

$a += $b ; // Объединение $a += $b — это $a и $b
echo «Объединение \$a += \$b: \n» ;
var_dump ( $a );

После выполнения скрипт напечатает следующее:

Объединение $a и $b: array(3) < ["a"]=>string(5) "яблоко" ["b"]=> string(6) "банан" ["c"]=> string(6) "вишня" > Объединение $b и $a: array(3) < ["a"]=>string(4) "груша" ["b"]=> string(10) "клубника" ["c"]=> string(6) "вишня" > Объединение $a += $b: array(3) < ["a"]=>string(5) "яблоко" ["b"]=> string(6) "банан" ["c"]=> string(6) "вишня" >

При сравнении элементы массива признаются идентичными, если совпадает и ключ, и его значение.

Пример #1 Comparing arrays

$a = array( «apple» , «banana» );
$b = array( 1 => «banana» , «0» => «apple» );

var_dump ( $a == $b ); // bool(true)
var_dump ( $a === $b ); // bool(false)
?>

Смотрите также

  • Массивы
  • Функции для работы с массивами

array_merge

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

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

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

Список параметров

Возвращаемые значения

Возвращает результирующий массив. Если вызывается без аргументов, возвращает пустой массив ( array ).

Список изменений

Версия Описание
7.4.0 Функция теперь может быть вызвана без каких-либо параметров. Ранее требовался хотя бы один параметр.

Примеры

Пример #1 Пример использования array_merge()

$array1 = array( «color» => «red» , 2 , 4 );
$array2 = array( «a» , «b» , «color» => «green» , «shape» => «trapezoid» , 4 );
$result = array_merge ( $array1 , $array2 );
print_r ( $result );
?>

Результат выполнения приведённого примера:

Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )

Пример #2 Простой пример использования array_merge()

$array1 = array();
$array2 = array( 1 => «data» );
$result = array_merge ( $array1 , $array2 );
?>

Помните, что числовые ключи будут перенумерованы!

Array ( [0] => data )

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

$array1 = array( 0 => ‘zero_a’ , 2 => ‘two_a’ , 3 => ‘three_a’ );
$array2 = array( 1 => ‘one_b’ , 3 => ‘three_b’ , 4 => ‘four_b’ );
$result = $array1 + $array2 ;
var_dump ( $result );
?>

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

array(5) < [0]=>string(6) "zero_a" [2]=> string(5) "two_a" [3]=> string(7) "three_a" [1]=> string(5) "one_b" [4]=> string(6) "four_b" >

Пример #3 Пример использования array_merge() с не массивами

$beginning = ‘foo’ ;
$end = array( 1 => ‘bar’ );
$result = array_merge ((array) $beginning , (array) $end );
print_r ( $result );
?>

Результат выполнения приведённого примера:

Array ( [0] => foo [1] => bar )

Смотрите также

  • array_merge_recursive() — Рекурсивное слияние одного или более массивов
  • array_replace() — Заменяет элементы массива элементами других переданных массивов
  • array_combine() — Создаёт новый массив, используя один массив в качестве ключей, а другой для его значений
  • Операторы, работающие с массивами

User Contributed Notes 5 notes

14 years ago

In some situations, the union operator ( + ) might be more useful to you than array_merge. The array_merge function does not preserve numeric key values. If you need to preserve the numeric keys, then using + will do that.

$array1 [ 0 ] = «zero» ;
$array1 [ 1 ] = «one» ;

$array2 [ 1 ] = «one» ;
$array2 [ 2 ] = «two» ;
$array2 [ 3 ] = «three» ;

$array3 = $array1 + $array2 ;

//This will result in::

$array3 = array( 0 => «zero» , 1 => «one» , 2 => «two» , 3 => «three» );

?>

Note the implicit «array_unique» that gets applied as well. In some situations where your numeric keys matter, this behaviour could be useful, and better than array_merge.

2 years ago

I wished to point out that while other comments state that the spread operator should be faster than array_merge, I have actually found the opposite to be true for normal arrays. This is the case in both PHP 7.4 as well as PHP 8.0. The difference should be negligible for most applications, but I wanted to point this out for accuracy.

Below is the code used to test, along with the results:

$before = microtime ( true );

for ( $i = 0 ; $i < 10000000 ; $i ++) $array1 = [ 'apple' , 'orange' , 'banana' ];
$array2 = [ ‘carrot’ , ‘lettuce’ , ‘broccoli’ ];

$array1 = [. $array1 . $array2 ];
>

$after = microtime ( true );
echo ( $after — $before ) . » sec for spread\n» ;

$before = microtime ( true );

for ( $i = 0 ; $i < 10000000 ; $i ++) $array1 = [ 'apple' , 'orange' , 'banana' ];
$array2 = [ ‘carrot’ , ‘lettuce’ , ‘broccoli’ ];

$array1 = array_merge ( $array1 , $array2 );
>

$after = microtime ( true );
echo ( $after — $before ) . » sec for array_merge\n» ;
?>

PHP 7.4:
1.2135608196259 sec for spread
1.1402177810669 sec for array_merge

PHP 8.0:
1.1952061653137 sec for spread
1.099925994873 sec for array_merge

2 years ago

In addition to the text and Julian Egelstaffs comment regarding to keep the keys preserved with the + operator:
When they say «input arrays with numeric keys will be renumbered» they MEAN it. If you think you are smart and put your numbered keys into strings, this won’t help. Strings which contain an integer will also be renumbered! I fell into this trap while merging two arrays with book ISBNs as keys. So let’s have this example:

$test1 [ ’24’ ] = ‘Mary’ ;
$test1 [ ’17’ ] = ‘John’ ;

$test2 [ ’67’ ] = ‘Phil’ ;
$test2 [ ’33’ ] = ‘Brandon’ ;

$result1 = array_merge ( $test1 , $test2 );
var_dump ( $result1 );

$result2 = [. $test1 , . $test2 ]; // mentioned by fsb
var_dump ( $result2 );
?>

You will get both:

Use the + operator or array_replace, this will preserve — somewhat — the keys:

$result1 = array_replace ( $test1 , $test2 );
var_dump ( $result1 );

$result2 = $test1 + $test2 ;
var_dump ( $result2 );
?>

You will get both:

The keys will keep the same, the order will keep the same, but with a little caveat: The keys will be converted to integers.

Соединить два массива php без методов

Я новичок в php. Вопрос, возможно, повторяющийся, но я подобного не нашёл. Бьюсь над этим уже несколько дней. Как соединить два НЕ вложенных массива или больше, не используя методы (array_merge например)? Проблема в том, что значения с одинаковыми индексами перезаписываются, собственно это и есть самый большой камень преткновения. На js, например, с этим проблем вообще нет, а на php всю голову сломал уже. Как соединить массивы без метода array_merge? Использовать метод — это слишком просто, а хотелось на примере кода разобраться, как можно слить два массива или лучше более (особенно перезапись ключей последующих массивов, сливаемых с первым и добавление количества аргументов по желанию, типа . spread). К сожалению, ничего лучше у меня не получилось, последующие массивы получаются вложенными. Знаю, что это бред, и знаю, в чём причина, но по другому делать тоже пробовал (foreach, array_map) — получается ещё бредовее.

$arr_first = [10, 20, 30, 40, 50]; $arr_second = [15, 20, 25, 30, 35]; $arr_third = [40, 45, 50, 55, 60]; function conc($a, . $args) < $res = [. $a, . $args]; return $res; >print_r(conc($arr_first, $arr_second, $arr_third)); 

Получается так:

Array ( [0] => 10 [1] => 20 [2] => 30 [3] => 40 [4] => 50 [5] => Array ( [0] => 15 [1] => 20 [2] => 25 [3] => 30 [4] => 35 ) [6] => Array ( [0] => 40 [1] => 45 [2] => 50 [3] => 55 [4] => 60 ) ) 

А надо так:

Array ( [0] => 10 [1] => 20 [2] => 30 [3] => 40 [4] => 50 [5] => 15 [6] => 20 [7] => 25 [8] => 30 [9] => 35 [10] => 40 [11] => 45 [12] => 50 [13] => 55 [14] => 60 ) 

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

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

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

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

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

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

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

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

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

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

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

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