Объединить массив по ключам php
- Different ways to write a PHP code
- How to write comments in PHP ?
- Introduction to Codeignitor (PHP)
- How to echo HTML in PHP ?
- Error handling in PHP
- How to show All Errors in PHP ?
- How to Start and Stop a Timer in PHP ?
- How to create default function parameter in PHP?
- How to check if mod_rewrite is enabled in PHP ?
- Web Scraping in PHP Using Simple HTML DOM Parser
- How to pass form variables from one page to other page in PHP ?
- How to display logged in user information in PHP ?
- How to find out where a function is defined using PHP ?
- How to Get $_POST from multiple check-boxes ?
- How to Secure hash and salt for PHP passwords ?
- Program to Insert new item in array on any position in PHP
- PHP append one array to another
- How to delete an Element From an Array in PHP ?
- How to print all the values of an array in PHP ?
- How to perform Array Delete by Value Not Key in PHP ?
- Removing Array Element and Re-Indexing in PHP
- How to count all array elements in PHP ?
- How to insert an item at the beginning of an array in PHP ?
- PHP Check if two arrays contain same elements
- Merge two arrays keeping original keys in PHP
- PHP program to find the maximum and the minimum in array
- How to check a key exists in an array in PHP ?
- PHP | Second most frequent element in an array
- Sort array of objects by object fields in PHP
- PHP | Sort array of strings in natural and standard orders
- How to pass PHP Variables by reference ?
- How to format Phone Numbers in PHP ?
- How to use php serialize() and unserialize() Function
- Implementing callback in PHP
- PHP | Merging two or more arrays using array_merge()
- PHP program to print an arithmetic progression series using inbuilt functions
- How to prevent SQL Injection in PHP ?
- How to extract the user name from the email ID using PHP ?
- How to count rows in MySQL table in PHP ?
- How to parse a CSV File in PHP ?
- How to generate simple random password from a given string using PHP ?
- How to upload images in MySQL using PHP PDO ?
- How to check foreach Loop Key Value in PHP ?
- How to properly Format a Number With Leading Zeros in PHP ?
- How to get a File Extension in PHP ?
- How to get the current Date and Time in PHP ?
- PHP program to change date format
- How to convert DateTime to String using PHP ?
- How to get Time Difference in Minutes in PHP ?
- Return all dates between two dates in an array in PHP
- Sort an array of dates in PHP
- How to get the time of the last modification of the current page in PHP?
- How to convert a Date into Timestamp using PHP ?
- How to add 24 hours to a unix timestamp in php?
- Sort a multidimensional array by date element in PHP
- Convert timestamp to readable date/time in PHP
- PHP | Number of week days between two dates
- PHP | Converting string to Date and DateTime
- How to get last day of a month from date in PHP ?
- PHP | Change strings in an array to uppercase
- How to convert first character of all the words uppercase using PHP ?
- How to get the last character of a string in PHP ?
- How to convert uppercase string to lowercase using PHP ?
- How to extract Numbers From a String in PHP ?
- How to replace String in PHP ?
- How to Encrypt and Decrypt a PHP String ?
- How to display string values within a table using PHP ?
- How to write Multi-Line Strings in PHP ?
- How to check if a String Contains a Substring in PHP ?
- How to append a string in PHP ?
- How to remove white spaces only beginning/end of a string using PHP ?
- How to Remove Special Character from String in PHP ?
- How to create a string by joining the array elements using PHP ?
- How to prepend a string in PHP ?
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 );
?>?php
Результат выполнения данного примера:
Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )
Пример #2 Простой пример использования array_merge()
Помните, что числовые ключи будут перенумерованы!
Если вы хотите дополнить первый массив элементами второго без перезаписи элементов первого массива и без переиндексации, используйте оператор объединения массивов + :
$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 );
?>?php
Ключи из первого массива будут сохранены. Если ключ массива существует в обоих массивах, то будет использован элемент из первого массива, а соответствующий элемент из второго массива будет проигнорирован.
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 );
?>?php
Результат выполнения данного примера:
Смотрите также
- array_merge_recursive() — Рекурсивное слияние одного или более массивов
- array_replace() — Заменяет элементы массива элементами других переданных массивов
- array_combine() — Создаёт новый массив, используя один массив в качестве ключей, а другой для его значений
- Операторы, работающие с массивами
User Contributed Notes 8 notes
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 = 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.
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:
for ( $i = 0 ; $i < 10000000 ; $i ++) $array1 = [ 'apple' , 'orange' , 'banana' ];
$array2 = [ ‘carrot’ , ‘lettuce’ , ‘broccoli’ ];
$after = microtime ( true );
echo ( $after — $before ) . » sec for spread\n» ;
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
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.
We no longer need array_merge() as of PHP 7.4.
Not to contradict ChrisM’s test, but I ran their code example and I got very different results for PHP 8.0.
Testing PHP 8.0.14
1.4955070018768 sec for spread
4.4120140075684 sec for array_merge
If you’re trying to merge an array with something that evaluates to NULL, you’ll get unpredictable results:
$c = array_merge ( $a , $b ); // this won’t work
echo «The merged array is:» ;
var_dump ( $c );
?>
Depending on your error setting, you might not even get anything at all.
array(3) [0]=>
string(1) «1»
[1]=>
string(1) «2»
[2]=>
string(1) «4»
>
NULL
PHP Warning: array_merge(): Expected parameter 2 to be an array, null given in /home/gwyneth/stupid-test.php on line 8
The merged array is: NULL
array(3) [0]=>
string(1) «1»
[1]=>
string(1) «2»
[2]=>
string(1) «4»
>
NULL
PHP Fatal error: Uncaught TypeError: array_merge(): Argument #2 must be of type array, null given in /home/gwyneth/stupid-test.php:8
Stack trace:
#0 /home/gwyneth/stupid-test.php(8): array_merge()
#1
thrown in /home/gwyneth/stupid-test.php on line 8
Depending on your display/debug settings, you might not even get anything.
The solution, of course, is to do a quick & dirty test before passing the 2nd argument:
$c = array_merge ( $a , $b ?? []);
echo «The merged array is:» ;
var_dump ( $c );
?>
Which gives the expected result (PHP 7.4 to PHP 8.2):
While it’s perfectly legitimate to merge empty arrays, null is *not* an empty array!
array_merge
Сливает элементы одного или большего количества массивов таким образом, что значения одного массива присоединяются к концу предыдущего. Результатом работы функции является новый массив.
Если входные массивы имеют одинаковые строковые ключи, тогда каждое последующее значение будет заменять предыдущее. Однако, если массивы имеют одинаковые числовые ключи, значение, упомянутое последним, не заменит исходное значение, а будет добавлено в конец массива.
В результирующем массиве значения исходного массива с числовыми ключами будут перенумерованы в возрастающем порядке, начиная с нуля.
Список параметров
Исходный сливаемый массив.
Дополнительные сливаемые массивы.
Возвращаемые значения
Возвращает результирующий массив.
Примеры
Пример #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 );
?>?php
Результат выполнения данного примера:
Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4 )
Пример #2 Простой пример использования array_merge()
Помните, что числовые ключи будут перенумерованы!
Если вы хотите дополнить первый массив элементами второго без перезаписи элементов первого массива и без переиндексации, используйте оператор объединения массивов +:
$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 );
?>?php
Ключи из первого массива будут сохранены. Если ключ массива существует в обоих массивах, то будет использован элемент из первого массива, а соответствующий элемент из второго массива будет проигнорирован.
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 );
?>?php
Результат выполнения данного примера:
Смотрите также
- array_merge_recursive() — Рекурсивное слияние двух или более массивов
- array_replace() — Замена элементов массива элементами других переданных массивов
- array_combine() — Создает новый массив, используя один массив в качестве ключей, а другой в качестве соответствующих значений
- array operators