PHP: khác nhau trong kết hợp mảng bằng array merge và +
PHP có nhiều cách kết hợp hai mảng thành một. Có một sự khác biệt tinh tế giữa hai phương pháp, một sự khác biệt đáng biết.
Chúng ta hãy xem xét so sánh hai phương thức này:
array_merge($first, $second);
// vs.
$first + $second;
Giả sử đây là hai mảng mà chúng ta đang làm việc:
$first = [
'a',
'b',
];
$second = [
'c',
];
Đây sẽ là kết quả của array_merge
:
array_merge($first, $second);
[
'a',
'b',
'c',
]
Trong khi toán tử +
cho chúng ta kết quả này:
$first + $second;
[
'a',
'b',
]
Chuyển đổi vị trí của first và second lại cho ra 1 kết quả khác:
$second + $first;
[
'c',
'b',
]
Có lẽ bạn đang bối rối? Tôi cũng vậy 😅😅
Bây giờ, ta viết lại mảng $first và $second đầy đủ các chỉ mục của chúng. Điều này sẽ làm cho mọi thứ rõ ràng hơn:
$first = [
0 => 'a',
1 => 'b',
];
$second = [
0 => 'c',
];
Bây giờ bạn có thể đoán được điều gì đang diễn ra:
- với toán tử
+
nếu khóa tồn tại ở 2 mảng nó sẽ giữ lại giá trị của mảng đầu tiên và chỉ thêm các phần tử ở bên phải ($second) vào bên trái ($first) nếu bên trái không tồn tạiKHÓA
đó - trong khi đó
array_merge
với key dạngsố
nó sẽđánh lại số
đó nhé!!! nếu khóa dạngstring
thì nó sẽ ghi đè lên nếuKHÓA
đó đã tồn tại.
Theo định nghĩa đó, chúng ta cũng có thể xác định rằng +
không bao giờ có thể được sử dụng để nối các mảng đa chiều, vì nó sẽ không đụng đến các phần tử chịu ảnh hưởng:
$first = [
'A' => [
'B' => true,
'C' => true,
],
];
$second = [
'A' => [
'B' => false,
'C' => false,
],
];
$first + $second;
// kết quả là
[
'A' => [
'B' => true,
'C' => true,
],
]
// trong khi dùng array_merge($first, $second); chúng ta sẽ có kết quả khác
[
'A' => [
'B' => false,
'C' => false,
],
]
"À mà khoan, có gì đó sai sai", hình như tôi đang nghe bạn lẩm bẩm gì đó: "chẳng phải array_merge_recursive
đã hỗ trợ rồi sao"
Ở đây chúng tôi có một trường hợp đặt tên rất đáng tiếc 😅😅. Xin đừng ngạc nhiên 😂😂 — PHP said 🤣🤣.
Hãy xem, array_merge
sẽ hợp nhất các phần tử phù hợp bằng cách ghi đè chúng. Dùng array_merge_recursive
sẽ khác, nó sẽ giữ cả hai phần tử và hợp nhất chúng trong một mảng mới, giữ cả hai giá trị.
Đây là ví dụ trước của chúng ta, và kết quả bằng array_merge_recursive
:
[
'A' => [
'B' => [
true,
false,
],
'C' => [
true,
false,
],
],
]
Điều gì về việc sáp nhập nhiều mảng? Bạn có thể đoán kết quả ngay bây giờ:
$first = ['a'];
$second = ['b'];
$third = ['c'];
// gộp
array_merge($first, $second, $third);
// kết quả
[
'a',
'b',
'c',
]
// gộp bằng +
$first + $second + $third
// kết quả rất là ngáo đá =))
[
'a',
]
Với bài viết nho nhỏ này, tôi hy vọng rằng bạn sẽ không thấy mình bối rối nữa khi bạn đi vào code PHP và cần gộp mảng.
Nguồn: https://stitcher.io/blog/array-merge-vs+ và tất nhiên được dịch bởi chàng trai thanh lịch vô địch khắp vũ trụ Chung Nguyễn 😆😆
Ủng hộ Chung Nguyễn Blog
Chung Nguyễn Blog sử dụng FlashVPS - Dịch vụ quản trị máy chủ chuyên nghiệp để quản lý VPS
#FlashVPS là dịch vụ cloud panel trên nền tảng web hỗ trợ khách hàng:
- * Quản lý máy chủ số lượng nhiều
- * Không có kinh nghiệm quản lý máy chủ
- * Thích sử dụng giao diện web đơn giản, trực quan hơn terminal
- * Quá nhàm chán với việc ghi nhớ và lặp lại việc gõ các câu lệnh
- * Muốn tự động hóa mọi thao tác
- * Muốn tiết kiệm thời gian quản trị máy chủ
- * Muốn tiết kiệm tiền bạc, nhân lực quản trị máy chủ 👉 https://flashvps.dev
Các bài viết trên website thường xuyên được đăng tải và cập nhật trên trang Facebook Chung Nguyễn Blog hãy tặng cho Chung một LIKE nhé! Mãi yêu các bạn!
813 👍
Bình luận
Vượng Nguyễn
Hai em này thì nhà em nhớ thế này:
1) + operator: gộp value trong B vào A theo key. Nếu B có key khác với key ở A thì nó mới gộp.
2) array_merge gộp value trong B vào A theo key. Nếu B có key là string giống ở A thì nó ghi đè từ value B vào value A. Nếu key là integer thì gộp hết bất kể giống nhau, và index là key integer mới sẽ được tạo.
3) thêm array_merge_recursive gộp value B vào A. Nếu B có key là string giống A thì thay vì ghi đè như array_merge() nó sẽ gộp 2 value cùng một key là string vào làm một array. Key index bắt đầu lại từ đầu, key string giữ nguyên.
Chung Nguyễn
thanks bác nhiều nhé 😋
hominh hoang
a
Nguyễn Duy Nguyên
đọc xong cũng ngáo đá theo =)))
Chung Nguyễn
kaka, cảm ơn bạn đã thừa nhận tài năng của mình :D