Hướng dẫn php array_merge vs + - php array_merge so với +

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

$first = [
    'a',
    'b',
];

$second = [
    'c',
];
2:

array_merge[$first, $second];

[
    'a',
    'b',
    'c',
]

Trong khi toán tử

$first = [
    'a',
    'b',
];

$second = [
    'c',
];
3 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ử
    $first = [
        'a',
        'b',
    ];
    
    $second = [
        'c',
    ];
    3 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ại 
    $first = [
        'a',
        'b',
    ];
    
    $second = [
        'c',
    ];
    5 đó
  • trong khi đó
    $first = [
        'a',
        'b',
    ];
    
    $second = [
        'c',
    ];
    2 với key dạng
    $first = [
        'a',
        'b',
    ];
    
    $second = [
        'c',
    ];
    7 nó sẽ
    $first = [
        'a',
        'b',
    ];
    
    $second = [
        'c',
    ];
    8 đó nhé!!! nếu khóa dạng
    $first = [
        'a',
        'b',
    ];
    
    $second = [
        'c',
    ];
    9 thì nó sẽ ghi đè lên nếu
    $first = [
        'a',
        'b',
    ];
    
    $second = [
        'c',
    ];
    5 đó đã tồn tại.

Theo định nghĩa đó, chúng ta cũng có thể xác định rằng

$first = [
    'a',
    'b',
];

$second = [
    'c',
];
3 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[$first, $second];

[
    'a',
    'b',
    'c',
]
2 đã 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,

$first = [
    'a',
    'b',
];

$second = [
    'c',
];
2 sẽ hợp nhất các phần tử phù hợp bằng cách ghi đè chúng. Dùng 
array_merge[$first, $second];

[
    'a',
    'b',
    'c',
]
2 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[$first, $second];

[
    'a',
    'b',
    'c',
]
2:

[
    '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: //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 😆😆

Theo dõi Chung Nguyễn Blog

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 nếu thường xuyên đọc bài trên website hay chỉ đơn giản là mến mộ sự đẹp trai thanh lịch của chàng trai coder tuổi trăng tròn đôi mươi thì hãy tặng cho Chung một LIKE trên trang Facebook Chung Nguyễn Blog nhé! Mãi yêu các bạn!LIKE trên trang Facebook Chung Nguyễn Blog nhé! Mãi yêu các bạn!

813 👍

Đánh giá bài viết

PHP: khác nhau trong kết hợp mảng bằng array merge và +

4.5/5 2 votes /5 2 votes

[PHP 4, PHP 5, PHP 7, PHP 8]

array_merge — Merge one or more arraysMerge one or more arrays

Description

array_merge[array

array_merge[$first, $second];

[
    'a',
    'b',
    'c',
]
6]: array[array
array_merge[$first, $second];

[
    'a',
    'b',
    'c',
]
6
]: array

If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended.

Values in the input arrays with numeric keys will be renumbered with incrementing keys starting from zero in the result array.

Parameters

array_merge[$first, $second];

[
    'a',
    'b',
    'c',
]
7

Variable list of arrays to merge.

Return Values

Returns the resulting array. If called without any arguments, returns an empty array. array.

Changelog

VersionDescription
7.4.0 array_merge[array
array_merge[$first, $second];

[
    'a',
    'b',
    'c',
]
6]: array

If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended.

Values in the input arrays with numeric keys will be renumbered with incrementing keys starting from zero in the result array. array_merge[] example

array_merge[$first, $second];

[
    'a',
    'b',
    'c',
]
8

Parameters

Array
[
    [color] => green
    [0] => 2
    [1] => 4
    [2] => a
    [3] => b
    [shape] => trapezoid
    [4] => 4
]

array_merge[$first, $second];

[
    'a',
    'b',
    'c',
]
7array_merge[] example

array_merge[$first, $second];

[
    'a',
    'b',
    'c',
]
9

Variable list of arrays to merge.

Return Values

$first + $second;

[
    'a',
    'b',
]
1

Returns the resulting array. If called without any arguments, returns an empty array.

$first = [
    'a',
    'b',
];

$second = [
    'c',
];
0

Changelogarray_merge[] with non-array types

$first + $second;

[
    'a',
    'b',
]
2

Parameters

$first = [
    'a',
    'b',
];

$second = [
    'c',
];
1

array_merge[$first, $second];

[
    'a',
    'b',
    'c',
]
7

  • Variable list of arrays to merge.
  • Return Values
  • Returns the resulting array. If called without any arguments, returns an empty array.
  • Changelog

Version

This function can now be called without any parameter. Formerly, at least one parameter has been required.

$first + $second;

[
    'a',
    'b',
]
3

$first + $second;

[
    'a',
    'b',
]
4

$first + $second;

[
    'a',
    'b',
]
5

$first + $second;

[
    'a',
    'b',
]
6

$first + $second;

[
    'a',
    'b',
]
7

Examples

Example #1 array_merge[] example

$first + $second;

[
    'a',
    'b',
]
8

$first + $second;

[
    'a',
    'b',
]
9

$second + $first;

[
    'c',
    'b',
]
0

$second + $first;

[
    'c',
    'b',
]
1

$second + $first;

[
    'c',
    'b',
]
2

The above example will output:

Example #1 array_merge[] example

$second + $first;

[
    'c',
    'b',
]
3

$second + $first;

[
    'c',
    'b',
]
4

$second + $first;

[
    'c',
    'b',
]
5

$second + $first;

[
    'c',
    'b',
]
6

$second + $first;

[
    'c',
    'b',
]
7

$second + $first;

[
    'c',
    'b',
]
8

$second + $first;

[
    'c',
    'b',
]
9

$first = [
    0 => 'a',
    1 => 'b',
];

$second = [
    0 => 'c',
];
0

The above example will output:

Example #2 Simple array_merge[] example

$first = [
    0 => 'a',
    1 => 'b',
];

$second = [
    0 => 'c',
];
1

$first = [
    0 => 'a',
    1 => 'b',
];

$second = [
    0 => 'c',
];
2

$first = [
    0 => 'a',
    1 => 'b',
];

$second = [
    0 => 'c',
];
0

Bài Viết Liên Quan

Chủ Đề