เมื่อเรามีข้อมูล 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)),'</pre>';
?>
ผลลัพธ์คือ มี Array มิติใหม่โผล่เพิ่มเข้าไป
Array
(
[a] => hello
[b] => world
[0] => Array
(
[a] => person
[b] => thing
[c] => other
[15] => x
)
)
แต่ที่ต้องการคือแบบนี้ กรณีที่มีข้อมูลเดิมอยู่แล้ว
ก็แทนที่ด้วยข้อมูลใหม่ไปเลย
เช่น ตำแหน่ง a เดิมทีเป็น hello
เมื่อเรียกใช้ฟังก์ชั่น array_merge();
ก็จะแทนด้วยค่าใหม่คือ person
<?php
$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
)*/
สังเกตว่า $b จะมีตำแหน่งที่ 15 มีค่าเป็น x
แต่เมื่อมา merge กันชื่อตำแหน่ง หรือ key ของ Array
จะถูกเปลี่ยนไปอัตโนมัติ
ซึ่งยังไม่ใช่ที่ต้องการงั้นมาดูอีกหนึ่งฟังก์ชั่นที่ตรงกับที่ต้องการกันว่าจะเป็นเช่นไร
ฟังก์ชั่นที่ว่านี้ก็คือ array_replace(); อ่านจากชื่อก็บอกอยู่แล้วว่า
"แทนที่" ดังนั้นก็ไม่ต้องกังวลว่าชื่อตำแหน่ง key จะหายอีกต่อไป
ดังตัวอย่างด้านล่างนี้
สังเกตว่าข้อมูลที่ได้เมื่อใช้ array_replace() จะคงสภาพ
เหมือน Array ชุดที่ 1 หรือชุดต้นฉบับที่เราต้องการนำไปใช้งาน
จะเปลี่ยนก็แต่ข้อมูลใหม่ที่ต้องการเพิ่มเข้าไปเท่านั้น
ข้อสังเกตอีกอย่างคือ array_merge()
จะทำการรวมข้อมูล Array แบบไม่สนใจ key ที่เป็นแบบตัวเลข
จะนำข้อมูลมารวมกันแล้วสร้าง key ตัวเลขให้ใหม่อัตโนมัติ
แต่ถ้าชื่อ key เป็นตัวอักษร จะมีการแทนที่ให้คล้ายกับ array_replace()
ดังนั้น หากต้องการให้ Array ชุดแรกเป็นต้นฉบับไม่เปลี่ยนแปลงชื่อ key เดิม
แม้จะเป็นตัวเลข (ซึ่งก็รวมถึง Array ชุดใหม่ด้วย) ก็ให้ใช้ array_replace()
เพิ่มข้อมูลเข้าไปนั่นเอง
ที่มา :
http://phpcodemania.blogspot.com/2018/02/php-array-replace-associative.html