$test = array('hi');
$test += array('test','oh');
var_dump($test);
Apa +
artinya array dalam PHP?
array_merge
? Seolah-olah array secara default array asosiatif dan array numerik adalah warga negara kelas dua.
$test = array('hi');
$test += array('test','oh');
var_dump($test);
Apa +
artinya array dalam PHP?
array_merge
? Seolah-olah array secara default array asosiatif dan array numerik adalah warga negara kelas dua.
Jawaban:
Mengutip dari Manual PHP tentang Operator Bahasa
Operator + mengembalikan array kanan yang ditambahkan ke array kiri; untuk kunci yang ada di kedua array, elemen dari array sebelah kiri akan digunakan, dan elemen yang cocok dari array sebelah kanan akan diabaikan.
Jadi, jika Anda melakukannya
$array1 = ['one', 'two', 'foo' => 'bar'];
$array2 = ['three', 'four', 'five', 'foo' => 'baz'];
print_r($array1 + $array2);
Kamu akan mendapatkan
Array
(
[0] => one // preserved from $array1 (left-hand array)
[1] => two // preserved from $array1 (left-hand array)
[foo] => bar // preserved from $array1 (left-hand array)
[2] => five // added from $array2 (right-hand array)
)
Jadi logika +
setara dengan cuplikan berikut:
$union = $array1;
foreach ($array2 as $key => $value) {
if (false === array_key_exists($key, $union)) {
$union[$key] = $value;
}
}
Jika Anda tertarik dengan detail implementasi C-level, langsung ke
Catatan, itu +
berbeda dari cara array_merge()
menggabungkan array:
print_r(array_merge($array1, $array2));
akan memberimu
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[foo] => baz // overwritten from $array2
[2] => three // appended from $array2
[3] => four // appended from $array2
[4] => five // appended from $array2
)
Lihat halaman tertaut untuk contoh lebih lanjut.
+
dan array_merge
memanggil di zend_hash_merge
bawah tenda. Ini juga diharapkan, karena dalam array PHP diimplementasikan sebagai peta hash yang dipesan.
+
dan array_merge
jahat dan tidak intuitif. Mereka bertolak belakang dengan apa yang akan dilakukan oleh pembacaan bahasa Inggris-polos secara intuitif kepada Anda 'menambah' atau 'menggabungkan' array. Bahasa / pustaka lain digunakan +
untuk menggabungkan daftar (misalnya dengan Python) dan fungsi "menggabungkan" untuk menambahkan pasangan kunci / nilai dari satu objek ke objek lain (misalnya dalam lodash). Namun dalam PHP itu sebaliknya; array_merge
dapat digunakan untuk meringkas array seperti daftar tetapi +
tidak bisa. Berbeda dengan array_merge
, +
selalu melakukan operasi yang akan disebut "gabungan" dalam bahasa lain.
Contoh terbaik yang saya temukan untuk menggunakan ini adalah dalam array konfigurasi.
$user_vars = array("username"=>"John Doe");
$default_vars = array("username"=>"Unknown", "email"=>"no-reply@domain.com");
$config = $user_vars + $default_vars;
The $default_vars
, karena menunjukkan, adalah array untuk nilai default. The $user_vars
array akan menimpa nilai yang didefinisikan dalam $default_vars
. Nilai-nilai yang hilang $user_vars
sekarang menjadi default dari vars $default_vars
.
Ini akan print_r
sebagai:
Array(2){
"username" => "John Doe",
"email" => "no-reply@domain.com"
}
Saya harap ini membantu!
Operator ini menggunakan gabungan dua array (sama dengan array_merge, kecuali bahwa dengan kunci duplikat array_merge ditimpa).
Dokumentasi untuk operator array ditemukan di sini .
Hati-hati dengan kunci numerik, apakah harus dilestarikan atau jika Anda tidak ingin kehilangan apa pun
$a = array(2 => "a2", 4 => "a4", 5 => "a5");
$b = array(1 => "b1", 3 => "b3", 4 => "b4");
Persatuan
print_r($a+$b);
Array
(
[2] => a2
[4] => a4
[5] => a5
[1] => b1
[3] => b3
)
menggabungkan
print_r(array_merge($a, $b));
Array
(
[0] => a2
[1] => a4
[2] => a5
[3] => b1
[4] => b3
[5] => b4
)
The +
Operator menghasilkan hasil yang sama seperti array_replace () . Namun karena argumen operator dibalik, urutan array yang dihasilkan juga mungkin berbeda.
Memperluas contoh lain dari halaman ini:
$array1 = array('one', 'two', 'foo' => 'bar');
$array2 = array('three', 'four', 'five', 'foo' => 'baz');
print_r($array1 + $array2);
print_r(array_replace($array2, $array1)); //note reversed argument order
output:
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[foo] => bar // preserved from $array1
[2] => five // added from $array2
)
Array
(
[0] => one // preserved from $array1
[1] => two // preserved from $array1
[2] => five // added from $array2
[foo] => bar // preserved from $array1
)
+
dijamin oleh spesifikasi? Bagaimana dengan array_replace
?
- Operasi array plus memperlakukan semua array sebagai array assoc.
- Ketika konflik utama selama nilai plus, nilai kiri (sebelumnya) akan disimpan
Saya memposting kode di bawah ini untuk memperjelas.
$a + $b = array_plus($a, $b)
function array_plus($a, $b){
$results = array();
foreach($a as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
foreach($b as $k=>$v) if(!isset($results[$k]))$results[$k] = $v;
return $results;
}
$var1 = "example";
$var2 = "test";
$output = array_merge((array)$var1,(array)$var2);
print_r($output);
Array ([0] => contoh [1] => tes)
+=
dan jawabannya sudah diterima+
. Dari pengujian saya, mereka tampaknya berperilaku sama.