เมื่อเรามีข้อมูล Array อยู่แล้วชุดหนึ่ง แต่ในการทำงานครั้งต่อไปต้องการนำ Array ชุดใหม่ใส่เพิ่มเข้าไปจะทำอย่างไร?
ฟังก์ชั่นที่เกี่ยวกับ Array ฟังก์ชั่นแรกที่โผล่ขึ้นในหัวก็คือ array_push();แต่เดี๋ยวก่อน!! มันเพิ่มเข้าไปจริง แต่มันไม่แทนที่ Array ชุดเดิมที่ key เหมือนกัน การเพิ่ม Array มิติใหม่เข้าไปอีกชุดหนึ่ง
<?php
$a = array('a' => 'hello', 'b' => 'world');
$b = array('a' => 'person', 'b' => 'thing', 'c'=>'other', '15'=>'x');
echo '<pre>', print_r(array_push($a, $b), true),'</pre>';
?>
Array
(
[a] => hello
[b] => world
[0] => Array
(
[a] => person
[b] => thing
[c] => other
[15] => x
)
)
แต่ที่ต้องการคือแบบนี้ กรณีที่มีข้อมูลเดิมอยู่แล้วก็แทนที่ด้วยข้อมูลใหม่ไปเลย เช่น ตำแหน่ง a เดิมทีเป็น hello เมื่อเรียกใช้ฟังก์ชั่น array_merge(); ก็จะแทนด้วยค่าใหม่คือ person
<?phpสังเกตว่า $b จะมีตำแหน่งที่ 15 มีค่าเป็น x แต่เมื่อมา merge กันชื่อตำแหน่ง หรือ key ของ Array จะถูกเปลี่ยนไปอัตโนมัติ ซึ่งยังไม่ใช่ที่ต้องการ
$a = array('a' => 'hello', 'b' => 'world');
$b = array('a' => 'person', 'b' => 'thing', 'c'=>'other', '15'=>'x');
print_r(array_merge($a, $b));
/*Array
(
[a] => person
[b] => thing
[c] => other
[0] => x
)*/
งั้นมาดูอีกหนึ่งฟังก์ชั่นที่ตรงกับที่ต้องการกันว่าจะเป็นเช่นไร
ฟังก์ชั่นที่ว่านี้ก็คือ array_replace(); อ่านจากชื่อก็บอกอยู่แล้วว่า "แทนที่" ดังนั้นก็ไม่ต้องกังวลว่าชื่อตำแหน่ง key จะหายอีกต่อไป ดังตัวอย่างด้านล่างนี้<?php
$a = array('0'=>'a', '1'=>'c');
$b = array('0'=>'b');
print_r(array_merge($a, $b));
/*Array
(
[0] => a
[1] => c
[2] => b
)*/
print_r(array_replace($a, $b));
/*Array
(
[0] => b
[1] => c
)*/
สังเกตว่าข้อมูลที่ได้เมื่อใช้ array_replace() จะคงสภาพเหมือน Array ชุดที่ 1 หรือชุดต้นฉบับที่เราต้องการนำไปใช้งาน จะเปลี่ยนก็แต่ข้อมูลใหม่ที่ต้องการเพิ่มเข้าไปเท่านั้น
ข้อสังเกตอีกอย่างคือ array_merge() จะทำการรวมข้อมูล Array แบบไม่สนใจ key ที่เป็นแบบตัวเลข จะนำข้อมูลมารวมกันแล้วสร้าง key ตัวเลขให้ใหม่อัตโนมัติ แต่ถ้าชื่อ key เป็นตัวอักษร จะมีการแทนที่ให้คล้ายกับ array_replace()
ดังนั้น หากต้องการให้ Array ชุดแรกเป็นต้นฉบับไม่เปลี่ยนแปลงชื่อ key เดิม แม้จะเป็นตัวเลข (ซึ่งก็รวมถึง Array ชุดใหม่ด้วย) ก็ให้ใช้ array_replace() เพิ่มข้อมูลเข้าไปนั่นเอง
ที่มา : https://stackoverflow.com/questions/34367511/differences-between-array-replace-and-array-merge-in-php
ความคิดเห็น
แสดงความคิดเห็น