$test = array('hi');
$test += array('test','oh');
var_dump($test);
อะไร+
หมายถึงอาร์เรย์ใน PHP?
array_merge
? มันเหมือนกับว่าอาร์เรย์เป็นค่าเริ่มต้นของการเชื่อมโยงและอาร์เรย์ที่เป็นตัวเลขเป็นพลเมืองชั้นสอง
$test = array('hi');
$test += array('test','oh');
var_dump($test);
อะไร+
หมายถึงอาร์เรย์ใน PHP?
array_merge
? มันเหมือนกับว่าอาร์เรย์เป็นค่าเริ่มต้นของการเชื่อมโยงและอาร์เรย์ที่เป็นตัวเลขเป็นพลเมืองชั้นสอง
คำตอบ:
ข้อความจากคู่มือ PHP เกี่ยวกับผู้ปฏิบัติงานด้านภาษา
ตัวดำเนินการ + ส่งคืนอาร์เรย์ทางขวาที่ผนวกเข้ากับอาร์เรย์ด้านซ้าย สำหรับคีย์ที่มีอยู่ในทั้งสองอาร์เรย์องค์ประกอบจากอาร์เรย์ด้านซ้ายจะถูกนำมาใช้และองค์ประกอบที่ตรงกันจากอาร์เรย์ด้านขวาจะถูกละเว้น
ดังนั้นหากทำ
$array1 = ['one', 'two', 'foo' => 'bar'];
$array2 = ['three', 'four', 'five', 'foo' => 'baz'];
print_r($array1 + $array2);
คุณจะได้รับ
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)
)
ดังนั้นตรรกะของ+
เทียบเท่ากับตัวอย่างต่อไปนี้:
$union = $array1;
foreach ($array2 as $key => $value) {
if (false === array_key_exists($key, $union)) {
$union[$key] = $value;
}
}
หากคุณมีความสนใจในรายละเอียดของการดำเนินการระดับหัว C ถึง
โปรดทราบว่า+
จะแตกต่างจากวิธีการarray_merge()
รวมอาร์เรย์:
print_r(array_merge($array1, $array2));
จะให้คุณ
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
)
ดูหน้าเชื่อมโยงสำหรับตัวอย่างเพิ่มเติม
+
และarray_merge
เรียกzend_hash_merge
ภายใต้ประทุน สิ่งนี้เป็นสิ่งที่คาดหวังเนื่องจากใน PHP อาร์เรย์จะถูกใช้งานเป็นแผนที่แฮชสั่ง
+
และarray_merge
วิปริตและไม่ได้ใช้งานง่าย มันเป็นวิธีที่ตรงกันข้ามกับสิ่งที่การอ่านภาษาอังกฤษธรรมดาจะบอกให้คุณรู้ว่า 'เพิ่ม' หรือ 'รวม' อาร์เรย์จะทำ ภาษา / ไลบรารีอื่น ๆ ใช้+
เพื่อเชื่อมโยงรายการ (เช่นใน Python) และฟังก์ชั่น "ผสาน" เพื่อเพิ่มคู่คีย์ / ค่าจากวัตถุหนึ่งไปยังอีกวัตถุหนึ่ง (เช่นในบ้านพักอาศัย) แต่ใน PHP มันเป็นอีกทางหนึ่ง array_merge
สามารถใช้สำหรับการเรียงลำดับรายการที่มีลักษณะคล้ายกัน แต่+
ไม่สามารถใช้ร่วมกันได้ ซึ่งแตกต่างจากarray_merge
, +
เสมอทำการดำเนินการที่จะถูกเรียกว่า "ผสาน" ในภาษาอื่น ๆ
ตัวอย่างที่ดีที่สุดที่ฉันพบสำหรับการใช้นี้อยู่ในอาร์เรย์การกำหนดค่า
$user_vars = array("username"=>"John Doe");
$default_vars = array("username"=>"Unknown", "email"=>"no-reply@domain.com");
$config = $user_vars + $default_vars;
$default_vars
เป็นมันแสดงให้เห็นเป็นอาร์เรย์สำหรับเป็นค่าเริ่มต้น อาร์เรย์จะเขียนทับค่าที่กำหนดไว้ใน$user_vars
$default_vars
ค่าใด ๆ ที่ขาดหายไปในตอนนี้เริ่มต้นจาก$user_vars
vars$default_vars
นี่จะprint_r
เป็น:
Array(2){
"username" => "John Doe",
"email" => "no-reply@domain.com"
}
ฉันหวังว่านี่จะช่วยได้!
โอเปอเรเตอร์นี้ใช้เวลารวมกันของสองอาร์เรย์ (เหมือนกับ array_merge ยกเว้นว่ามีคีย์ที่ซ้ำกัน array_merge ถูกเขียนทับ)
ระวังด้วยปุ่มตัวเลขหากพวกเขาควรจะเก็บรักษาไว้หรือถ้าคุณไม่ต้องการที่จะสูญเสียอะไร
$a = array(2 => "a2", 4 => "a4", 5 => "a5");
$b = array(1 => "b1", 3 => "b3", 4 => "b4");
สหภาพ
print_r($a+$b);
Array
(
[2] => a2
[4] => a4
[5] => a5
[1] => b1
[3] => b3
)
ผสาน
print_r(array_merge($a, $b));
Array
(
[0] => a2
[1] => a4
[2] => a5
[3] => b1
[4] => b3
[5] => b4
)
+
ผู้ประกอบการผลิตผลเช่นเดียวกับarray_replace () อย่างไรก็ตามเนื่องจากอาร์กิวเมนต์ของโอเปอเรเตอร์กลับด้านการเรียงลำดับของอาร์เรย์ผลลัพธ์อาจแตกต่างกัน
ขยายตัวอย่างอื่นจากหน้านี้:
$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
เอาท์พุท:
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
)
+
การรับประกันโดยรายละเอียดหรือไม่ เกี่ยวกับarray_replace
อะไร
- Array plus operation ใช้อาร์เรย์ทั้งหมดเป็นอาร์เรย์ assoc
- เมื่อคีย์ขัดแย้งกันระหว่างบวกค่าซ้าย (ก่อนหน้า) จะถูกเก็บไว้
ฉันโพสต์โค้ดด้านล่างเพื่อทำให้สิ่งต่าง ๆ ชัดเจน
$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] => ตัวอย่าง [1] => ทดสอบ)
+=
+
จากการทดสอบของฉันพวกเขาดูเหมือนจะทำงานเหมือนกัน