Hợp nhất mảng trong foreach php

Ghi chú. Nếu bạn chỉ gán một mảng cho hàm array_merge() và các khóa là số nguyên, thì hàm này sẽ trả về một mảng mới với các khóa số nguyên bắt đầu từ 0 và tăng thêm 1 cho mỗi giá trị (Xem ví dụ bên dưới)

Mẹo. Sự khác biệt giữa hàm này và hàm array_merge_recursive() là khi hai hoặc nhiều phần tử mảng có cùng khóa. Thay vì ghi đè các khóa, hàm array_merge_recursive() tạo giá trị dưới dạng một mảng

Sử dụng array_merge bên trong một vòng lặp là một kẻ giết người hiệu suất. Toán tử trải rộng sẽ giúp bạn cải thiện điều này bằng cách làm phẳng mảng

Làm phẳng mảng một cấp

Tôi đã thấy mọi người sử dụng hàm array_merge trong một vòng lặp như

This is a very bad practice because it’s a (memory) performance killer! Instead, you should use the spread operator (in PHP since 5.6!):

________0

Unpacking an assoc-array

What if you had an assoc-array instead like this one?

________2

In that case, you will need to unpack its values:

________0

In Functional Programming, this is known as flatting a list. No loops & no more performance problem.

Flatting a multilevel array

What if you wanted to flat a multilevel array like this one?

________0

Or like this one, even with key-values?

________5

In these cases, you might want to use the internal standard library:

________0

Conclusion

Usually, being aware of how to flat a “2 level” array might be sufficient:

________0

Otherwise, the internal standard library will help you deal with it.


References

Hợp nhất mảng trong foreach php

Jose Maria Valera Reales

Theo

10 tháng 11 năm 2020

·

2 phút đọc

Không bao giờ sử dụng array_merge trong Vòng lặp

Người điều hành trải rộng để giải cứu

Làm phẳng mảng một cấp

Tôi đã thấy mọi người sử dụng hàm

$lists = [
[1, 2],
[3, 4],
[5, 6],
];
$merged = [];foreach($lists as $list) {
$merged = array_merge($merged, $list);
}
// $merged === [1, 2, 3, 4, 5, 6];
0 trong một vòng lặp như

$lists = [
[1, 2],
[3, 4],
[5, 6],
];
$merged = [];foreach($lists as $list) {
$merged = array_merge($merged, $list);
}
// $merged === [1, 2, 3, 4, 5, 6];

Đây là một thực tế rất tồi vì nó là kẻ giết hiệu suất (bộ nhớ)

Thay vào đó, bạn nên sử dụng toán tử trải rộng (trong PHP kể từ 5. 6. )

$lists = [
[1, 2],
[3, 4],
[5, 6],
];
$merged = array_merge(...$lists);
// === [1, 2, 3, 4, 5, 6];

Giải nén một mảng assoc

Điều gì sẽ xảy ra nếu bạn có một mảng assoc thay vì như thế này?

$lists = [
'key-1' => [1, 2],
'key-2' => [3, 4],
'key-3' => [5, 6],
];

Trong trường hợp đó, bạn sẽ cần giải nén các giá trị của nó

$merged = array_merge(...array_values($lists));
// === [1, 2, 3, 4, 5, 6];

Trong Lập trình hàm, điều này được gọi là làm phẳng danh sách

Không có vòng lặp & không còn vấn đề về hiệu suất

Làm phẳng một mảng đa cấp

Điều gì sẽ xảy ra nếu bạn muốn làm phẳng một mảng đa cấp như thế này?

$lists = [[1], 2, [[3, 4], 5], [[[]]], [[[6]]], 7, 8, []];

Hoặc thích cái này, ngay cả với khóa-giá trị?

$lists = [
'key-1' => [
1,
[2],
'key-2' => [
3,
[
'key-3' => [4, 5],
],
],
],
6,
'key-4' => [7, 8],
];

Trong những trường hợp này, bạn có thể muốn sử dụng thư viện tiêu chuẩn nội bộ

$merged = iterator_to_array(
new RecursiveIteratorIterator(
new RecursiveArrayIterator($lists)
),
$use_keys = false
);
// $merged === [1, 2, 3, 4, 5, 6, 7, 8];
. Kết luận

Thông thường, biết cách làm phẳng mảng “2 cấp” có thể là đủ

________số 8

Còn không thì thư viện chuẩn nội bộ sẽ giúp bạn xử lý

Người giới thiệu
  • https. //wiki. php. net/rfc/spread_operator_for_array
  • https. // mã hoa hồng. org/wiki/Flatten_a_list
  • https. // kalessil. github. io/phpinspectionsea/docs/hiệu suất. html#slow-array-function-used-in-loop

Làm cách nào để hợp nhất mảng trong PHP?

Hàm array_merge() trong PHP .
Hợp nhất hai mảng thành một mảng. $a1=mảng("đỏ","xanh"); .
Hợp nhất hai mảng kết hợp thành một mảng. $a1=array("a"=>"đỏ","b"=>"xanh"); .
Chỉ sử dụng một tham số mảng với các khóa số nguyên. $a=array(3=>"đỏ",4=>"xanh");

Làm cách nào để lưu trữ nhiều giá trị trong mảng trong PHP bằng vòng lặp foreach?

Khai báo mảng $items bên ngoài vòng lặp và sử dụng $items[] để thêm các mục vào mảng . $items = mảng(); .

Array_merge trong PHP là gì?

Hàm array_merge( ) là một hàm có sẵn của PHP. 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. Chức năng này đã được giới thiệu trong PHP 4. 0

Làm cách nào để sử dụng hàm Array_combine trong PHP?

Hàm array_combine() tạo một mảng bằng cách sử dụng các phần tử từ một mảng "khóa" và một mảng "giá trị" . Ghi chú. Cả hai mảng phải có số phần tử bằng nhau.