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.
ie:
<?php
$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.
--Julianarray_merge
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
array_merge
Референца за `function.array-merge.php` со подобрена типографија и навигација.
array_merge
(PHP 4, PHP 5, PHP 7, PHP 8)
array_merge — Спој една или повеќе низи
= NULL
Спој една или повеќе низи
Ги спојува елементите од една или повеќе низи заедно така што вредностите од едната се додаваат на крајот од претходната. Враќа резултантна низа. not Ако влезната низа има исти клучни вредности, тогаш подоцнежната вредност за тој клуч ќе ја презапише претходната. Ако, сепак, низите содржат нумерички клучни вредности, подоцнежната вредност ќе
ја презапише оригиналната вредност, но ќе биде додадена.
Параметри
arrays-
Вредностите во влезната низа со нумерички клучни вредности ќе бидат пренумерирани со зголемување на клучните вредности почнувајќи од нула во резултантната низа.
Вратени вредности
Променлив список на низи за спојување. array.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 7.4.0 | Поминувањето објект на параметарот array е застарено. Користете property_exists наместо тоа. |
Примери
Пример #1 array_merge() example
<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4
)
Враќа резултантна низа. Ако се повика без аргументи, враќа празна array_merge() example
<?php
$array1 = array();
$array2 = array(1 => "data");
$result = array_merge($array1, $array2);
print_r($result);
?>Пример #2 Едноставно
Array
(
[0] => data
)
Не заборавајте дека нумеричките клучни вредности ќе бидат пренумерирани!
+ Ако сакате да додадете елементи од втората низа на првата низа без да ги презапишете елементите од првата низа и без повторно индексирање, користете го
<?php
$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() Клучните вредности од првата низа ќе бидат зачувани. Ако клуч на низа постои во двете низи, тогаш ќе се користи елементот од првата низа и елементот со соодветниот клуч од втората низа ќе биде игнориран.
<?php
$beginning = 'foo';
$end = array(1 => 'bar');
$result = array_merge((array) $beginning, (array) $end);
print_r($result);
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[0] => foo
[1] => bar
)
Види Исто така
- array_merge_recursive() со типови што не се низи
- array_replace() - Спојувај една или повеќе низи рекурзивно
- array_combine() - Ги заменува елементите од проследените низи во првата низа
- оператори за низи
Белешки од корисници 4 белешки
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:
<?php
$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_mergeIn 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:
<?php
$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:
array(4) {
[0]=>
string(4) "Mary"
[1]=>
string(4) "John"
[2]=>
string(4) "Phil"
[3]=>
string(7) "Brandon"
}
Use the + operator or array_replace, this will preserve - somewhat - the keys:
<?php
$result1 = array_replace($test1, $test2);
var_dump($result1);
$result2 = $test1 + $test2;
var_dump($result2);
?>
You will get both:
array(4) {
[24]=>
string(4) "Mary"
[17]=>
string(4) "John"
[67]=>
string(4) "Phil"
[33]=>
string(7) "Brandon"
}
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.
[...$a, ...$b]
does the same as
array_merge($a, $b)
and can be faster too.
https://wiki.php.net/rfc/spread_operator_for_array#advantages_over_array_merge