Tôi muốn hợp nhất nhiều mảng với nhau trong khi sử dụng các giá trị từ mảng đầu tiên và chỉ có các giá trị duy nhất. Có cách nào nhanh hơn sử dụng array_merge()
, array_unique()
và nhà điều hành +
không?PHP array_merge() với tùy chọn chỉ có giá trị mảng và giá trị duy nhất đầu tiên?
function foo(...$params) {
$a = [
'col1',
'col2_alias' => 'col2',
'col3'
];
$merged = array_merge($a, ...$params);
$unique = array_unique($merged);
print_r($merged);
print_r($unique);
print_r($a + $unique);
}
foo(
['col4', 'col5_alias' => 'col5', 'col6'],
['col7', 'col1', 'col5_alias' => 'col5', 'col2_alias' => 'col10']);
Chỉ cần sáp nhập các mảng mang lại cho tôi nhân đôi giá trị, và ghi đè giá trị trong mảng đầu tiên:
Array
(
[0] => col1 // duplicate
[col2_alias] => col10 // overwritten
[1] => col3
[2] => col4
[col5_alias] => col5
[3] => col6
[4] => col7
[5] => col1 // duplicate
)
Sử dụng array_unique()
rõ ràng là ấn định giá trị nhân bản, nhưng không phải là giá trị ghi đè:
Array
(
[0] => col1
[col2_alias] => col10
[1] => col3
[2] => col4
[col5_alias] => col5
[3] => col6
[4] => col7
)
Sau khi sử dụng toán tử +
, mảng là cách tôi muốn.
Array
(
[0] => col1
[col2_alias] => col2
[1] => col3
[2] => col4
[col5_alias] => col5
[3] => col6
[4] => col7
)
Bạn sẽ cân nhắc sử dụng một thư viện bộ sưu tập? –
Điều gì là xấu trong nhà điều hành + nếu nó hoạt động tốt? Nó có chậm không? – instead
@ ÁlvaroGuimarães Thật không may, nó nằm trong mã cũ và việc thêm thư viện bộ sưu tập sẽ là một rắc rối. – GreeKatrina