Sự khác biệt giữa Array_merge() và Array_merge_recursive() trong PHP là gì?

hàm array_merge_recursive() trong php

0 1548

Hàm array_merge_recursive() trong PHP dùng để gộp hai hay nhiều mảng thành một mảng mới nghĩa là cộng giá trị của mảng này vào cuối mảng khác

Ghi chú. sự khác biệt giữa array_merge và array_merge_recursive là nếu hai mảng có cùng khóa thì array_merge phân bổ giá trị của mảng thứ hai cho khóa đó nhưng hàm array_merge_recursive gán một mảng cho khóa đó chứa giá trị của cả hai mảng được gán cho khóa đó

Hàm array_merge_recursive() hợp nhất một hoặc nhiều mảng thành một mảng theo cách đệ quy. Sự khác biệt giữa hàm này và hàm array_merge() là nếu hai hoặc nhiều phần tử có cùng khóa, thì hàm array_merge_recursive() tạo thành giá trị dưới dạng một mảng. Trong trường hợp này, hàm array_merge() xem xét cái cuối cùng

cú pháp

array_merge_recursive(arr1, arr2, arr3, …)

Thông số

  • arr1 - Mảng ban đầu để hợp nhất

  • mảng2 - Một mảng khác

  • mảng3 − Một mảng khác

Trở lại

Hàm array_merge_recursive() trả về một mảng trong đó các phần tử của tất cả các mảng được truyền trong tham số được hợp nhất

Sau đây là một ví dụ hợp nhất hai mảng với một khóa được lặp lại trong mảng thứ hai. Trong trường hợp này, hàm array_merge_recursive() hình thành giá trị dưới dạng một mảng

Chúng ta đã thấy các hàm array_merge và array_merge_recursive. Như tên gọi của chúng, chúng giúp hợp nhất các mảng trong PHP. Tuy nhiên, cần phải hiểu sự khác biệt cốt lõi trong các chức năng này. Sự hiểu biết này sẽ giúp bạn sử dụng đúng chức năng ở đúng nơi

Trong bài viết này, chúng ta sẽ khám phá difference between array_merge and array_merge_recursive trong PHP. Trước đó, chúng tôi khuyên bạn nên làm quen với các chức năng này. Dưới đây là các liên kết đến các bài viết chúng tôi đã thực hiện cho bạn

PHP array_merge. Cách sử dụng với các ví dụ trong PHP

Mảng PHP_merge_recursive. Cách sử dụng với các ví dụ trong PHP

Khi bạn đã hoàn tất, chúng tôi sẵn sàng đi

Sự khác biệt giữa array_merge và array_merge_recursive là gì?

Như chúng tôi đã đề cập, các hàm này hợp nhất các mảng PHP. Vậy thì sự khác biệt là gì? . PHP array_merge và array_merge_recursive hoạt động khác biệt khi chúng gặp các khóa tương tự là các chuỗi.  

Hãy hiểu sự khác biệt của array_merge và array_merge_recursive trong PHP bằng các ví dụ so sánh.  

PHP array_merge ghi đè các khóa chuỗi tương tự, thay thế giá trị trước đó bằng giá trị mới nhất, trong khi array_merge_recursive gán một mảng cho khóa tương tự và nối các giá trị vào mảng đó. Ví dụ sau sẽ làm rõ sự khác biệt

Đây là ví dụ và đầu ra cho array_merge khi các khóa tương tự là chuỗi

<?php

$array1 = ["Emp#1"=>"Franklin","Emp#2"=>"Richard","Emp#3"=>"Jake"];
$array2 = ["Emp#4"=>"Tyson","Emp#2"=>"Narnie","Emp#5"=>"Kylie"];
 
$merged_array = array_merge($array1, $array2);
 
print_r($merged_array);
 
/*
OUTPUT
Array
(
    [Emp#1] => Franklin
    [Emp#2] => Narnie  
    [Emp#3] => Jake    
    [Emp#4] => Tyson  
    [Emp#5] => Kylie  
)
*/
?>

Nhìn thấy. Nó ghi đè lên khóa “Emp#2” giống nhau ở cả hai mảng. Giá trị xảy ra trước đó “Richard” được thay thế bằng giá trị mới nhất “Narnie”.  

Hãy xem cách array_merge_recursive xử lý nó

<?php
 
$array1 = ["Emp#1"=>"Franklin","Emp#2"=>"Richard","Emp#3"=>"Jake"];
$array2 = ["Emp#4"=>"Tyson","Emp#2"=>"Narnie","Emp#5"=>"Kylie"];
 
$merged_array = array_merge_recursive($array1, $array2);
 
print_r($merged_array);
 
/*
OUTPUT
Array
(
    [Emp#1] => Franklin
    [Emp#2] => Array
        (
            [0] => Richard
            [1] => Narnie
        )
 
    [Emp#3] => Jake
    [Emp#4] => Tyson
    [Emp#5] => Kylie
)
*/
?>

Do tính chất đệ quy của nó, PHP array_merge_recursive giữ lại các giá trị bằng cách nối thêm chúng vào một mảng với khóa “Emp#2”

Khi nào thì sử dụng array_merge và array_merge_recursive?

Cả hai chức năng này đều có trường hợp sử dụng. Thật vô nghĩa khi sử dụng một hàm như array_merge có khả năng làm mất dữ liệu khi ghi đè, nhưng thực tế là nó có một trường hợp sử dụng quan trọng. Kịch bản thuận lợi nhất để sử dụng array_merge là hợp nhất các mảng cấu hình. Hãy xem xét điều đó

Cài đặt cấu hình – trường hợp sử dụng array_merge

Các tệp cấu hình là một khía cạnh thiết yếu của sự phát triển. Các nhà phát triển thường sửa lại các tệp cấu hình. Những người chưa trưởng thành cảm thấy khó khăn vì họ có thể làm hỏng dự án của mình khi vô tình sửa đổi những thứ họ không nên làm.  
Nhưng hãy tưởng tượng một kịch bản có hai mảng cấu hình, một mảng có cài đặt cấu hình cũ và mảng kia có cài đặt cấu hình mới nhất. Rõ ràng là cài đặt mới nhất cần ghi đè cài đặt trước đó. Vì vậy, chúng tôi nhận ra rằng chúng tôi chắc chắn sẽ cần một hàm như array_merge để ghi đè lên các giá trị của các khóa tương tự. Đây là cách

<?php
$old_config = [
    "src" => '/project-src',
    "dest" => '/project-dest',
    "script" => 'run --start',
    "version" => '1.0',
    "author" => 'Alex'
];
 
$new_config = [
    "src" => '/project-src',
    "dest" => '/project-dest-new',
    "script" => 'run',
    "version" => '1.1',
    "author" => 'Alex'
];
 
$new_config = array_merge($old_config, $new_config);
 
print_r($new_config);
 
/*
OUTPUT
Array
(
    [src] => /project-src
    [dest] => /project-dest-new
    [script] => run
    [version] => 1.1
    [author] => Alex
)
*/

thì đấy. Nó không trộn cài đặt cấu hình mà ghi đè cài đặt cũ. Đó là những gì chúng tôi muốn.  

Vì vậy, đó là một ví dụ thực tế cho việc sử dụng array_merge. Tiếp theo, hãy xem một ví dụ mà array_merge_recursive rất phù hợp

Dữ liệu người dùng – trường hợp sử dụng array_merge

Đây là một mảng dữ liệu người dùng được tích lũy trong các mảng khác nhau. Lưu ý rằng một số dữ liệu người dùng đã có mặt trong nhiều mảng

$array1 = [
    "User#1" => ["Status"=>"Active","Roles"=>["Monitor","Collaborator"],"Hi! I am junior developer"],
    "User#2" => ["Status"=>"Offline","Roles"=>["Developer","QA"],"Hi! I am QA engineer"],
    "User#3" => ["Status"=>"Left","Roles"=>["Trainee","UI/UX"],"Hi! I am UI/UX deisgner"],
];
$array2 = [
    "User#1" => ["Roles"=>"Developer","I develop the backend system"],
    "User#2" => ["I design the UI/UX of the application"],
];
$array3 = [
    "User#3" => ["Roles"=>["Trainee","UI/UX"],"MovedTo"=>"Project Zero"],
    "User#4" => ["Status"=>"Active","Roles"=>["Project Manager"]],
];

Nên có chức năng sắp xếp dữ liệu thành một mảng để dễ truy cập. Đó là nơi mà hàm array_merge_recursive có thể hữu ích Đây là đầu ra với array_merge_recursive

/*
OUTPUT
Array
(
    [User#1] => Array
        (
            [Status] => Active
            [Roles] => Array
                (
                    [0] => Monitor
                    [1] => Collaborator
                    [2] => Developer
                )
 
            [0] => Hi! I am junior developer
            [1] => I develop the backend system
        )
 
    [User#2] => Array
        (
            [Status] => Offline
            [Roles] => Array
                (
                    [0] => Developer
                    [1] => QA
                )
 
            [0] => Hi! I am QA engineer
            [1] => I design the UI/UX of the application
        )
 
    [User#3] => Array
        (
            [Status] => Left
            [Roles] => Array
                (
                    [0] => Trainee
                    [1] => UI/UX
                    [2] => Trainee
                    [3] => UI/UX
                )
 
            [0] => Hi! I am UI/UX deisgner
            [MovedTo] => Project Zero
        )
 
    [User#4] => Array
        (
            [Status] => Active
            [Roles] => Array
                (
                    [0] => Project Manager
                )
 
        )
 
)
*/

siêu. Chúng ta đã thấy một số trường hợp sử dụng khá tốt để làm rõ sự khác biệt giữa array_merge và array_merge_recursive trong PHP

Phần kết luận

Trong bài viết này, chúng ta đã thấy sự khác biệt của array_merge và array_merge_recursive trong PHP với các ví dụ. Sự khác biệt là array_merge ghi đè lên các giá trị của các khóa chuỗi tương tự, thay thế giá trị trước đó bằng giá trị mới nhất. Để so sánh với điều này, hàm array_merge_recursive nối các giá trị vào một mảng và gán chúng cho khóa tương ứng

Chúng tôi cũng đã thấy một số tình huống hoặc trường hợp sử dụng cho cả hai chức năng này. Hy vọng rằng bây giờ bạn đã hiểu rõ về sự khác biệt giữa các chức năng này. Đó là tất cả cho bài viết này. Hãy theo dõi các bài viết và hướng dẫn PHP thú vị hơn

Bạn muốn khám phá thêm các bài hướng dẫn PHP hữu ích?

Chúng tôi có nhiều bài viết thú vị liên quan đến PHP. Bạn có thể khám phá những điều này để tìm hiểu thêm về PHP

Cách hợp nhất 2 mảng có cùng khóa trong PHP

mảng_merge_recursive. Cách khởi kiện với các ví dụ trong PHP

PHP array_filter. Cách sử dụng với các ví dụ trong PHP

Bài viết liên quan

Sự khác biệt giữa Array_merge() và Array_merge_recursive() trong PHP là gì?
Hợp nhất 2+ mảng PHP có cùng khóa. Ví dụ về mã 2023
Sự khác biệt giữa Array_merge() và Array_merge_recursive() trong PHP là gì?
Cách chia mảng liên kết bằng mã PHP
Sự khác biệt giữa Array_merge() và Array_merge_recursive() trong PHP là gì?
Sự khác biệt giữa vòng lặp while và do while trong PHP
Sự khác biệt giữa Array_merge() và Array_merge_recursive() trong PHP là gì?
Cách thực hiện


  • ← Sự khác biệt giữa array_combine và array_merge trong PHP
  • Hợp nhất 2+ mảng PHP có cùng khóa. Ví dụ về mã 2023 →

Viết mã tốt hơn nhanh hơn

Nhấp vào đây để nhận các bí mật hàng đầu 'Trở thành Rockstar PHP Dev trong 7 ngày' của chúng tôi được gửi đến hộp thư đến của bạn

đăng ký

Sự khác biệt giữa Array_merge() và Array_merge_recursive() trong PHP là gì?

Stephen Phép Lạ

Chào. Tôi hy vọng bạn thích bài viết này. Tôi đã phát triển các trang web và phần mềm một cách chuyên nghiệp trong hơn 20 năm. Tôi bắt đầu FuelingPHP như một cách để đền đáp lại cộng đồng nguồn mở đã giúp tôi có thể sống thoải mái khi xây dựng những thứ tôi yêu thích

Sự khác biệt giữa Array_merge và Array_combine trong PHP là gì?

Hàm array_merge() có thể nhận nhiều tham số và phần tử của các mảng có thể khác nhau. Hàm array_combine() chỉ nhận hai tham số và cả hai phải có cùng số phần tử

Array_merge_recursive trong PHP là gì?

Array_merge_recursive() là một hàm có sẵn trong PHP và được sử dụng để hợp nhất hai hoặc nhiều mảng thành một mảng theo cách đệ quy . Hàm này được sử dụng để hợp nhất các phần tử hoặc giá trị của hai hoặc nhiều mảng lại với nhau thành một mảng duy nhất.

Sự khác biệt giữa Array_replace_recursive và Array_merge_recursive là gì?

Sự khác biệt là array_merge_recursive không ghi đè lên các giá trị của cùng một khóa, mà nối thêm chúng. Tuy nhiên, array_replace_recursive sử dụng thuật toán có xu hướng ghi đè đệ quy và thay thế các giá trị của mảng. Vì vậy, mảng kết quả từ cả hai chức năng này khác nhau đáng kể

Sự khác biệt giữa hợp nhất mảng và thay thế mảng trong PHP là gì?

Hợp nhất sẽ giữ nguyên nội dung gốc trong khi thay thế sẽ phá hoại .