1. Hàm array_replace() trong PHP

Hàm array_replace() trong PHP giúp ta sửa đổi các giá trị trong mảng. Việc sửa đổi ở đây bằng cách thay thế giá trị của mảng trước bằng giá trị của mảng sau dựa vào những key . Nếu chúng có cùng key thì hàm array_replace() sẽ thay thế các phần tử của mảng đầu tiên bằng các phần tử của mảng thứ hai. Việc thay thế sẽ được thực hiện theo những quy tắc sau:

  • Nếu một key trong mảng đầu tiên cũng tồn tại trong mảng thứ hai, thì giá trị của nó trong mảng đầu tiên được thay thế bằng giá trị của key đó trong mảng thứ hai.
  • Nếu một key trong mảng thứ hai không tồn tại trong mảng đầu tiên, thì nó được tạo trong mảng đầu tiên và giá trị của nó từ mảng thứ hai được sao chép trong mảng đầu tiên.
  • Nếu một key trong mảng đầu tiên không có trong bất kỳ mảng nào tiếp theo, thì giá trị của key đó được giữ nguyên trong mảng đầu tiên.
  • Các mảng được xử lý theo thứ tự mà chúng được truyền cho hàm, Nếu có nhiều hơn 2 mảng truyền vào, các mảng truyền vào sẽ được ưu tiên thay thế đè lên mảng trước đó nếu có khóa trùng nhau. Hay ta có thể hiểu một key của mảng đầu tiên có trong nhiều hơn một mảng, thì giá trị của nó sẽ được thay thế bằng giá trị của mảng mà nó xuất hiện lần cuối cùng.

Hàm array_replace() không sửa đổi mảng theo cách đệ quy mà thay thế các giá trị trong mảng đầu tiên bằng bất kỳ kiểu nào có trong mảng thứ hai. Hàm này được giới thiệu và sử dụng từ phiên bản PHP 5.3.0

2. Cú pháp của hàm array_replace() trong PHP

Ta có cú pháp hàm array_replace() trong PHP là :

array_replace ( $array1, $array2, $array3, ....)

Trong đó thì $array1 , $array2 , $array3 chính là danh sách những mảng được truyền vào hàm. Với $array1 là mảng sẽ được sửa đổi. Những mảng còn lại là các mảng truyền vào, để so sánh key với mảng $array1 và thực hiện thay thế.

Kết quả trả về là một mảng mới với các phần tử đã được thay thế.

Ví dụ : Thay thế các giá trị của mảng đầu tiên $a1 bằng các giá trị từ mảng thứ hai $a2

<?php
$a1=array("PHP","Java");
$a2=array("Python","HTML");
echo '<pre>';
var_dump(array_replace($a1,$a2));
?>

Kết quả

array(2) {
  [0]=>
  string(6) "Python"
  [1]=>
  string(4) "HTML"
}

Trong ví dụ này toàn bộ key của mảng $a1 giống với key của $a2 đã được thay thế value của nó. Kết quả thu được là mảng mới như trên.

3. Ví dụ về hàm array_replace() trong PHP

Ví dụ 1: key trong mảng $a2 không tồn tại trong key mảng $a1

<?php
$a1=array("a"=>"Python","b"=>"HTML");
$a2=array("a"=>"PHP","Java","CSS","c"=>"XML");
echo '<pre>';
print_r(array_replace($a1,$a2));
?>

Kết quả

Array
(
    [a] => PHP
    [b] => HTML
    [0] => Java
    [1] => CSS
    [c] => XML
)

Trong ví dụ này ta có thể thấy có những key ở mảng $a2 không hề tồn tại trong mảng $a1 . Nhưng khi sử dụng hàm array_replace() thì hàm này sẽ tự động thêm (tạo mới) những keyvalue này vào mảng $a1 . Bất kể key đó là dạng chuỗi hay dạng số. Vì vậy hãy lưu ý khi sử dụng hàm array_replace() về điểm này.

Ví dụ 2: truyền vào 2 mảng để thay thế

<?php
$a1=array("PHP","Java");
$a2=array("Python","HTML","CSS");
$a3=array("C","C++","Js","SQL");
echo '<pre>';
print_r(array_replace($a1,$a2,$a3));
?>

Kết quả

Array
(
    [0] => C
    [1] => C++
    [2] => Js
    [3] => SQL
)

Trong ví dụ này trước hết ta hãy nhớ rằng hàm array_replace() sẽ xử lý các mảng theo thứ tự mà chúng được truyền cho hàm. Ở đây ta đã truyền vào 3 mảng vì vậy key của mảng $a1 sẽ được thay thế bằng giá trị của key ở mảng $a3 ( mảng được truyền vào cuối cùng). Tiếp theo đó trong mảng $a3 lại có những key chưa xuất hiện ở mảng $a1 vì vậy hàm sẽ tạo mới những keyvalue này cho mảng $a1 . Kết quả cuối cùng ta thu được một mảng mới như trên.

Ví dụ 3:

<?php
$a1 = array("aim", "plan", "vision", "clarity");
$a2 = array("word1" => "loneliness", "word2" => "happiness");
$a3 = array(0 => "solitude");
  
$resArr = array_replace($a1, $a2, $a3);
  
echo '<pre>';
print_r($resArr);
  
?>

Kết quả

Array
(
    [0] => solitude
    [1] => plan
    [2] => vision
    [3] => clarity
    [word1] => loneliness
    [word2] => happiness
)

Ví dụ 4 : sử dụng với một mảng đa chiều

<?php
$a1=array("a"=>array("red"),"b"=>array("green","blue"));
$a2=array("a"=>array("yellow"),"b"=>array("black"));
$a3=array("a"=>array("orange"),"b"=>array("burgundy"));
echo '<pre>';
print_r(array_replace($a1,$a2,$a3));
?>

Kết quả

Array
(
    [a] => Array
        (
            [0] => orange
        )

    [b] => Array
        (
            [0] => burgundy
        )

)

Sau khi nhận kết quả ta có thể thấy được giá trị “blue” đã không xuất hiện trong mảng được trả về. Lý do tại sao nhỉ? Hãy học bài tiếp theo để hiểu được vấn đề này nhé!