PHP Array การแทนที่ข้อมูล Array ชุดแรก ด้วยข้อมูล Array ชุดใหม่ แบบ associative

โดย SONGCHAI SAETERN

เมื่อเรามีข้อมูล 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
$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 จะหายอีกต่อไป ดังตัวอย่างด้านล่างนี้

<?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



PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/