ทั้งตัวดำเนินการ "+" และ array_merge():array array_merge (array array1, array array2 [, array ...]) สามารถผสานหลายอาร์เรย์ได้ แต่มีความแตกต่างเล็กน้อยในกระบวนการใช้งาน
array_merge มีอธิบายไว้ในคู่มืออ้างอิงดังนี้:
array_merge() ผสานเซลล์ของอาร์เรย์ตั้งแต่ 2 อาร์เรย์ขึ้นไป โดยนำค่าในอาร์เรย์หนึ่งมาต่อท้ายอาร์เรย์ก่อนหน้า ส่งกลับอาร์เรย์ผลลัพธ์
หากอาร์เรย์อินพุตมีชื่อคีย์สตริงเหมือนกัน ค่าที่อยู่หลังชื่อคีย์จะเขียนทับค่าก่อนหน้า อย่างไรก็ตามหากอาร์เรย์มีคีย์ตัวเลข ค่าที่ตามมาจะไม่เขียนทับค่าดั้งเดิม แต่จะถูกผนวกเข้ากับค่าเหล่านั้น
ความแตกต่างระหว่างทั้งสองคือ:
1. เมื่อชื่อคีย์อาร์เรย์เป็นชื่อคีย์ตัวเลข และมีคีย์ตัวเลขที่มีชื่อเดียวกันในอาร์เรย์ทั้งสองที่จะผสาน การใช้ array_merge() จะไม่เขียนทับค่าเดิม ในขณะที่ใช้ "+" เพื่อผสานอาร์เรย์ จะแทนที่อันแรก ค่าจะถูกส่งกลับเป็นผลลัพธ์สุดท้ายและค่าเหล่านั้นในอาร์เรย์ที่ตามมาที่มีชื่อคีย์เดียวกันจะถูก "ละทิ้ง" (หมายเหตุ: มันไม่ได้เขียนทับแต่จะเก็บค่าที่ปรากฏไว้ก่อน) ตัวอย่าง:
$array1 = array(1=>'0');
$array2 = array(1=> "ข้อมูล");
$result1 = $array2 + $array1;/*ผลลัพธ์คือค่าของ $array2*/
print_r($ผลลัพธ์);
$result = $array1 + $array2 ;/*ผลลัพธ์คือค่าของ $array1*/
print_r($ผลลัพธ์);
$result3 = array_merge($array2,$array1);/*ผลลัพธ์คือค่าของ $array2 และ $array1 และชื่อคีย์ถูกกำหนดใหม่*/
print_r($ผลลัพธ์3);
$result4 = array_merge($array1,$array2);/*ผลลัพธ์คือค่าของ $array1 และ $array2 และชื่อคีย์ถูกกำหนดใหม่*/
print_r($result4);
ผลลัพธ์ที่ได้คือ:
อาร์เรย์ ( [1] => ข้อมูล )
อาร์เรย์ ( [1] => 0 )
อาร์เรย์ (
[0] => ข้อมูล
[1] => 0
-
อาร์เรย์
-
[0] => 0
[1] => ข้อมูล
)
2. เมื่อชื่อคีย์อาร์เรย์เดียวกันเป็นอักขระ ตัวดำเนินการ "+" จะเหมือนกับชื่อคีย์เป็นตัวเลข แต่ array_merge() จะเขียนทับค่าก่อนหน้าของชื่อคีย์เดียวกัน
ตัวอย่าง:
$array1 = array('asd'=>'0');
$array2 = array('asd' => "data");
$result1 = $array2 + $array1;/*ผลลัพธ์คือค่าของ $array2*/
print_r($ผลลัพธ์);
$result = $array1 + $array2 ;/*ผลลัพธ์คือค่าของ $array1*/
print_r($ผลลัพธ์);
$result3 = array_merge($array2,$array1);/*ผลลัพธ์คือ $array1*/
print_r($ผลลัพธ์3);
$result4 = array_merge($array1,$array2);/*ผลลัพธ์คือ $array2*/
print_r($ผลลัพธ์4);
ผลลัพธ์ที่ได้คือ:
Array ([asd] => data)
อาร์เรย์ ( [asd] => 0 )
อาร์เรย์ ( [asd] => 0 )
อาร์เรย์ ( [asd] => ข้อมูล )