Tôi đang làm một công việc mới và điều thú vị khi làm việc với mã của người khác là bạn thường học được rất nhiều thứ mà bạn chưa biết. Một vài tuần trước, tôi đã tìm ra một cách để hợp nhất các mảng trong PHP bằng toán tử +, thay vì sử dụng các hàm mảng [e. g. array_merge] vì vậy hãy chia sẻ cái này tại đây
Thí dụ
Cách dễ nhất để minh họa điều này là với một ví dụ
Sử dụng toán tử cộng để hợp nhất một mảng thực sự hoạt động tốt nhất với một mảng kết hợp, nếu không, nó sẽ hợp nhất trên các chỉ mục được đánh số, điều này có thể dẫn đến một số kết quả không mong muốn hoặc kỳ lạ
Đây là một vài mảng, với một số phần tử giao nhau và một số phần tử khác nhau
$array1 = array[ 'fruit' => 'apple', 'vegetable' => 'carrot', 'drink' => 'water', 'snack' => 'chips' ]; $array2 = array[ 'fruit' => 'banana', 'drink' => 'juice', 'sport' => 'running' ];
Thứ tự ưu tiên khi sử dụng toán tử + để hợp nhất các mảng này là từ trái sang phải. Vì vậy, nếu chúng ta thêm $array1 và $array2 như vậy, 'apple' sẽ được ưu tiên hơn 'banana' đối với phần tử trái cây
Chúng ta đã thấy nhiều chức năng khác nhau để hợp nhất các mảng PHP. Trong bài viết này, chúng ta sẽ xem cách hợp nhất hai mảng có cùng khóa PHP. Mỗi chức năng có một cơ chế khác nhau khi nói đến các phím tương tự. Một số chức năng ghi đè lên các giá trị trong khi các chức năng khác giữ lại các giá trị. Chúng tôi sẽ khám phá các tùy chọn khác nhau. Tuy nhiên, bạn nên đọc về các chức năng mà cuối cùng chúng ta sẽ sử dụng tại đây
- mảng_merge trong PHP
- array_merge đệ quy trong PHP
- mảng_combine trong PHP
Như chúng tôi đã đề cập, mọi chức năng xử lý các phím tương tự khác nhau. Cũng có sự khác biệt giữa khóa số nguyên và khóa chuỗi. Vì vậy, hãy xem các chức năng này và hiểu những điều kỳ quặc liên quan.
Hợp nhất 2 mảng PHP với cùng mã đề xuất chính Ví dụ
$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
]
*/
Hợp nhất 2 mảng có cùng khóa PHP bằng hàm array_merge
PHP array_merge
là một chức năng tuyệt vời để hợp nhất các mảng có cùng khóa trong PHP. Tuy nhiên, nó ghi đè lên các giá trị khi khóa là chuỗi, nhưng nó có thể lập chỉ mục lại các khóa số. Đây là một ví dụ với các phím số
$arr1 = [
0 => "Zero",
1 => "One",
2 => "Two",
3 => "Three",
4 => "Four",
5 => "Five"
];
$arr2 = [
0 => "Six",
1 => "Seven",
2 => "Eight",
3 => "Nine",
4 => "Ten"
];
$merged = array_merge[$arr1, $arr2];
print_r[$merged];
/*
OUTPUT
Array
[
[0] => Zero
[1] => One
[2] => Two
[3] => Three
[4] => Four
[5] => Five
[6] => Six
[7] => Seven
[8] => Eight
[9] => Nine
[10] => Ten
]
*/
thì đấy. Nó đã hợp nhất các mảng với các khóa tương tự bằng cách lập chỉ mục lại chúng. Tuy nhiên, chúng tôi không có đặc quyền tương tự khi khóa là chuỗi. Hãy xác nhận nó thông qua một ví dụ
$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
]
*/
Thấy. Nó chỉ ghi đè lên “Emp#2”. Thay vì giữ lại cả hai giá trị, nó chỉ ghi đè giá trị trước đó bằng giá trị mới nhất, “Richard” với “Narnie” trong ví dụ. Vì vậy, chúng tôi không muốn mất thông tin do ghi đè và đó là lý do tại sao chúng tôi có một chức năng tuyệt vời khác để giải quyết vấn đề này và đó là chức năng chúng ta sẽ thấy tiếp theo
Cách hợp nhất nhiều mảng PHP với cùng khóa bằng hàm array_merge_recursive
___________ kết hợp đệ quy các mảng. Đệ quy cho phép nó hợp nhất 2 mảng có cùng khóa PHP sao cho nó giữ lại giá trị trong một mảng thay vì ghi đè lên chúng. Hãy xem điều đó trong ví dụ sau
$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
]
*/
Bạn có thể thấy đó là cùng một ví dụ được sử dụng trước đây. Tuy nhiên, array_merge_recursive hợp nhất các mảng có cùng khóa PHP bằng cách nối các giá trị của chúng vào một mảng thay vì ghi đè lên giá trị trước đó bằng giá trị mới nhất, giống như Array_merge đã làm. Thật tuyệt phải không? . Hãy xem điều đó cũng
Tùy chọn 3. Hợp nhất 2 mảng có cùng khóa trong PHP bằng array_combine
PHP array_combine
hoạt động hơi khác so với hai chức năng chúng ta đã thấy. Nó nhận một mảng các khóa và giá trị rồi hợp nhất chúng. Tuy nhiên, nó ghi đè giá trị trước đó bằng giá trị mới nhất. Hãy xem làm thế nào
$keys = ["A","B","B","C"];
$values = [1,2,3,4];
$combined_arr = array_combine[$keys,$values];
print_r[$combined_arr];
/*
OUTPUT
Array
[
[A] => 1
[B] => 3
[C] => 4
]
*/
Vì vậy, nó không khớp với lần xuất hiện đầu tiên của khóa tương tự với giá trị tương ứng của nó. May mắn thay, chúng tôi có một cách giải quyết cho nó. Hãy cùng kiểm tra nào
function array_combine_[$keys, $values]{
$result = array[];
foreach [$keys as $i => $k] {
$result[$k][] = $values[$i];
}
array_walk[$result, function[&$v]{
$v = [count[$v] == 1] ? array_pop[$v]: $v;
}];
return $result;
}
Chức năng này được giải thích chi tiết trong bài viết liên quan. Nếu bạn muốn hiểu sâu về nó, thì hãy đọc bài viết. Nhắc lại ví dụ, nó hợp nhất các mảng có cùng khóa PHP với
/*
OUTPUT
Array
Array
[
[A] => 1
[B] => Array
[
[0] => 2
[1] => 3
]
[C] => 4
]
*/
Lần này nó giữ lại các giá trị tương ứng với các khóa tương tự. Vì vậy, chúng tôi đã khám phá tất cả các tùy chọn này và đã đến lúc kết thúc bài viết này
Phần kết luận
Trong bài viết này, chúng ta đã thấy nhiều tùy chọn khác nhau để hợp nhất các mảng có cùng khóa PHP. Chúng ta đã xem lại các hàm như array_merge, array_merge_recursive và array_combine. Mỗi chức năng này xử lý việc hợp nhất các mảng với các khóa tương tự khác nhau. Array_merge_recursive có vẻ là tùy chọn khả thi nhất nếu bạn không muốn mất dữ liệu
Tuy nhiên, thực tế này không có nghĩa là hai chức năng kia không có tác dụng. Trên thực tế, một số tình huống có thể yêu cầu ghi đè hơn là giữ lại dữ liệu và đó chính xác là điều mà array_merge thực hiện. Vì vậy, đó là tất cả về bài viết này. Chúng tôi hy vọng bạn đã học được một cái gì đó mới ngày hôm nay. 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
Mảng PHP_combine. Cách sử dụng với các ví dụ 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
- Sự khác biệt giữa array_walk và array_walk_recursive trong PHP →
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ý
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