Saya memiliki dua array seperti ini:
array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);
array(
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);
Saya ingin menggabungkan dua larik ini sedemikian rupa sehingga tidak mengandung duplikat dan juga menyimpan kunci aslinya. Misalnya keluarannya harus:
array(
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);
Saya telah mencoba ini tetapi itu mengubah kunci aslinya:
$output = array_unique( array_merge( $array1 , $array2 ) );
Ada solusi?
$array1 + $array2
adalah solusi yang singkat dan efisien daripadaarray_merge() - array_combine()
kombinasi$a + $b != array_merge($a, $b)
Anda harus mempertimbangkan itu
$array1 + $array2 != $array2 + $array1
$array1 = array( '11' => 'x1', '22' => 'x1' ); $array2 = array( '22' => 'x2', '33' => 'x2' );
dengan $ array1 + $ array2
$array1 + $array2 = array( '11' => 'x1', '22' => 'x1', '33' => 'x2' );
dan dengan $ array2 + $ array1
$array2 + $array1 = array( '11' => 'x1', '22' => 'x2', '33' => 'x2' );
sumber
Ini bekerja:
$output = $array1 + $array2;
sumber
[1,2,3] + [4,5,6] == [1,2,3]
http_build_query(array_merge($array1, $array2))
tidak berhasil untuk saya, sedangkanhttp_build_query($array1 + $array2)
berhasil.Untuk melakukan ini, Anda dapat melakukan loop melalui satu dan menambahkan yang lain:
<?php $test1 = array( '11' => '11', '22' => '22', '33' => '33', '44' => '44' ); $test2 = array( '44' => '44', '55' => '55', '66' => '66', '77' => '77' ); function combineWithKeys($array1, $array2) { foreach($array1 as $key=>$value) $array2[$key] = $value; asort($array2); return $array2; } print_r(combineWithKeys($test1, $test2)); ?>
UPDATE: KingCrunch hadir dengan solusi terbaik :
print_r($array1+$array2);
sumber
Jika Anda menggunakan PHP 7.4 atau lebih tinggi, Anda dapat menggunakan operator penyebaran
...
seperti contoh berikut dari PHP Docs:$arr1 = [1, 2, 3]; $arr2 = [...$arr1]; //[1, 2, 3] $arr3 = [0, ...$arr1]; //[0, 1, 2, 3] $arr4 = array(...$arr1, ...$arr2, 111); //[1, 2, 3, 1, 2, 3, 111] $arr5 = [...$arr1, ...$arr1]; //[1, 2, 3, 1, 2, 3] function getArr() { return ['a', 'b']; } $arr6 = [...getArr(), 'c']; //['a', 'b', 'c'] $arr7 = [...new ArrayIterator(['a', 'b', 'c'])]; //['a', 'b', 'c'] function arrGen() { for($i = 11; $i < 15; $i++) { yield $i; } } $arr8 = [...arrGen()]; //[11, 12, 13, 14]
Ia bekerja seperti di JavaScript ES6.
Lihat selengkapnya di https://wiki.php.net/rfc/spread_operator_for_array .
sumber
$array1 + $array2
$ouput = $array1 + $array2
. Sekarang saya telah belajar sesuatu yang baru! Terima kasih!Ini bekerja:
$a = array(1 => 1, 2 => 2, 3 => 3); $b = array(4 => 4, 5 => 5, 6 => 6); $c = $a + $b; print_r($c);
sumber
Peringatan! $ array1 + $ array2 menimpa kunci, jadi solusi saya (untuk array multidimensi) adalah menggunakan array_unique ()
array_unique(array_merge($a, $b), SORT_REGULAR);
Memperhatikan:
Ini bekerja dengan sempurna . Semoga membantu sama.
sumber
array_merge()
tidak menyimpan kuncinya. Array yang dibuat oleh itu 0 diindeks.+
. Lihatlah: PHPFiddle , $ b [0] akan hilang ...Cara baru untuk melakukannya dengan php7.4 adalah operator Spread [...]
$parts = ['apple', 'pear']; $fruits = ['banana', 'orange', ...$parts, 'watermelon']; var_dump($fruits);
Operator penyebar harus memiliki kinerja yang lebih baik dari
array_merge
Keuntungan signifikan dari operator Spread adalah ia mendukung objek yang dapat dilalui, sedangkan fungsi array_merge hanya mendukung array.
sumber
https://www.php.net/manual/en/function.array-merge.php
<?php $array1 = array("color" => "red", 2, 4); $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4); $result = array_merge($array1, $array2); print_r($result); ?>
sumber