1. Hàm array_merge_recursive() trong PHP

Hàm array_merge_recursive() trong PHP giúp ta nối hai hay nhiều mảng lại với nhau thành một mảng duy nhất. Có nghĩa là hàm này sẽ hợp nhất các phần tử hoặc giá trị của hai hoặc nhiều mảng với nhau thành một mảng duy nhất. Hay ta có thể hiểu đơn giản là mảng sau sẽ được viết tiếp vào cuối mảng trước đó. Nó cũng gần giống như hàm array_merge() mà ta đã tìm hiểu ở bài trước.

Tuy nhiên sự khác nhau của hàm array_merge_recursive() với hàm array_merge() là những key giống nhau. Như ta đã biết với hàm array_merge()key dạng chuỗi giống nhau thì hàm này chỉ lấy key xuất hiện cuối cùng. Nhưng với hàm array_merge_recursive() thì tất cả key giống sẽ được sử dụng. Nếu các mảng đầu vào có cùng các key ở dạng chuỗi, thì các value cho các key này sẽ được gộp vào trong cùng một mảng. Việc này được thực hiện một cách đệ quy, để mà nếu một trong các value là chính mảng đó, hàm sẽ gộp nó với đầu vào tương ứng trong mảng khác.

Nếu mảng có key dạng số trùng nhau thì nó sẽ không được gộp vào như key dạng chuỗi mà sẽ được nối tiếp.

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

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

array_merge_recursive(array1, array2, array3, ...)

Trong đó : array1 , array2 , array3 , … là các mảng dữ liệu đầu vào mà chúng ta cần nối với nhau. Ta có thể truyền vào n mảng tùy thích với việc các mảng sẽ được phân tác nhau bằng dấu phẩy ( , ) trong hàm. Và ta bắt buộc phải truyền ít nhất một mảng vào trong hàm.

Hàm này sẽ trả về một mảng mới mà trong đó các mảng ta nhập vào hàm đã được nối lại với nhau. Các mảng có cùng key dạng chuỗi sẽ được nhóm lại cùng nhau thành một mảng với key của mảng này sẽ được đánh số tăng dần bắt đầu từ 0 và value lần lượt là value của key giống nhau này.

Có nghĩa là nếu như trong những mảng truyền vào có những key giống nhau thì một mảng đa chiều sẽ được tạo ra. Trong trường hợp ta chỉ truyền vào một mảng cho hàm array_merge_recursive() thì nó sẽ hoạt động y hệt như hàm array_merge().

Ví dụ: nối hai mảng thành một mảng

<?php
$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","d"=>"yellow");
echo '<pre>';
print_r(array_merge_recursive($a1,$a2));
?>

Kết quả

Array
(
    [a] => red
    [b] => green
    [c] => blue
    [d] => yellow
)

Ở ví dụ này không có bất kỳ key nào giống nhau cả cho nên giá trị trả về là mảng mới sau khi đã hợp nhất hai mảng input với nhau.

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

Ví dụ 1: nối hai mảng với nhau

<?php
$a1=array("a"=>"red","b"=>"green");
$a2=array("c"=>"blue","b"=>"yellow");
echo '<pre>';
print_r(array_merge_recursive($a1,$a2));
?>

Kết quả

Array
(
    [a] => red
    [b] => Array
        (
            [0] => green
            [1] => yellow
        )

    [c] => blue
)


Kết quả trả về là một mảng đa chiều khi trong các mảng input có những key giống nhau. Những key giống nhau này được kết hợp lại thành một mảng được đánh số thứ tự tăng dần bắt đầu từ 0 và các value được sử dụng theo thứ tự.

Ví dụ 2: chỉ truyền vào một mảng cho hàm

<?php  
$a=array("a"=>"PHP","b"=>"Python","c"=>"Java");  
$b=array("HTML","CSS","C"); 

echo '<pre>';
print_r(array_merge_recursive($a)); 

echo '<pre>';
print_r(array_merge_recursive($b)); 
?>

Kết quả

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

Cách thức chuyển đổi tương tự như hàm array_merge()

Ví dụ 3: nối ba mảng với nhau

<?php  
$a=array("HTML","a"=>"PHP","b"=>"Python","c"=>"Java");  
$b=array("HTML","CSS","C"); 
$c=array("a"=>"lập trình","b"=>"từ đầu","C","C++");

echo '<pre>';
print_r(array_merge_recursive($a,$b,$c)); 

?>

Kết quả

Array
(
    [0] => HTML
    [a] => Array
        (
            [0] => PHP
            [1] => lập trình
        )

    [b] => Array
        (
            [0] => Python
            [1] => từ đầu
        )

    [c] => Java
    [1] => HTML
    [2] => CSS
    [3] => C
    [4] => C
    [5] => C++
)

Ta có thể thấy những key dạng số giống nhau được viết theo thứ tự mà không bị ghi đè. Còn key dạng chuỗi giống nhau thì vẫn được gộp lại thành một chuỗi với key sẽ theo thứ tự tăng dần bắt đầu từ 0.