Để lọc ra các giá trị từ một mảng và thu được một mảng mới chứa tất cả các giá trị thỏa mãn điều kiện lọc, bạn có thể sử dụng hàm array_filter
Lọc các giá trị không trống
Trường hợp lọc đơn giản nhất là xóa tất cả các giá trị "trống"
$my_array = [1,0,2,null,3,'',4,[],5,6,7,8];
$non_empties = array_filter[$my_array]; // $non_empties will contain [1,2,3,4,5,6,7,8];
Lọc theo gọi lại
Lần này chúng tôi xác định quy tắc lọc của riêng mình. Giả sử chúng ta chỉ muốn lấy các số chẵn
$my_array = [1,2,3,4,5,6,7,8];
$even_numbers = array_filter[$my_array, function[$number] {
return $number % 2 === 0;
}];
Hàm array_filter
nhận mảng cần lọc làm đối số đầu tiên và hàm gọi lại xác định vị từ bộ lọc làm đối số thứ hai
5. 6
Lọc theo chỉ mục
Tham số thứ ba có thể được cung cấp cho hàm array_filter
, cho phép điều chỉnh giá trị nào được chuyển đến hàm gọi lại. Tham số này có thể được đặt thành ARRAY_FILTER_USE_KEY
hoặc ARRAY_FILTER_USE_BOTH
, điều này sẽ dẫn đến việc gọi lại nhận khóa thay vì giá trị cho từng phần tử trong mảng hoặc cả giá trị và khóa làm đối số của nó. Ví dụ: nếu bạn muốn xử lý các chỉ mục thay vì các giá trị
$numbers = [16,3,5,8,1,4,6];
$even_indexed_numbers = array_filter[$numbers, function[$index] {
return $index % 2 === 0;
}, ARRAY_FILTER_USE_KEY];
Chỉ mục trong mảng được lọc
Lưu ý rằng array_filter
bảo tồn các khóa mảng ban đầu. Một lỗi phổ biến là thử sử dụng vòng lặp
$my_array = [1,2,3,4,5,6,7,8];
$even_numbers = array_filter[$my_array, function[$number] {
return $number % 2 === 0;
}];
1 trên mảng đã lọc$my_array = [1,2,3,4,5,6,7,8];
$even_numbers = array_filter[$my_array, function[$number] {
return $number % 2 === 0;
}];
2], 3 [_______1_______3], 5 [chuỗi rỗng $my_array = [1,2,3,4,5,6,7,8];
$even_numbers = array_filter[$my_array, function[$number] {
return $number % 2 === 0;
}];
4] và 7 [mảng trống $my_array = [1,2,3,4,5,6,7,8];
$even_numbers = array_filter[$my_array, function[$number] {
return $number % 2 === 0;
}];
5] đã bị xóa cùng với các khóa chỉ mục tương ứng của chúngNếu bạn cần lặp qua kết quả của bộ lọc trên một mảng được lập chỉ mục, trước tiên bạn nên gọi ________1_____6 về kết quả của ________13_____ để tạo một mảng mới với các chỉ mục chính xác
Hàm array_filter[] trong PHP lọc các phần tử của mảng bằng hàm gọi lại và nó có thể được sử dụng cho nhiều mục đích. Hàm array_filter[] cung cấp một cách đơn giản và ngắn gọn để lọc mảng nhiều chiều theo khóa và giá trị
Trong đoạn mã ví dụ sau, chúng tôi sẽ chỉ cho bạn cách lọc các giá trị từ mảng đa chiều tương tự như SQL LIKE bằng cách sử dụng hàm array_filter[] trong PHP. Sử dụng mã này, bạn có thể lọc các mảng nhiều chiều theo khóa và giá trị cụ thể
$array = array[
array['name' => 'John Doe', 'email' => 'john@gmail.com'],
array['name' => 'Marry Lies', 'email' => 'marry@gmail.com'],
array['name' => 'Andrew Joe', 'email' => 'andrew@gmail.com'],
];$like = 'jo';
$result = array_filter[$array, function [$item] use [$like] {
if [stripos[$item['name'], $like] !== false] {
return true;
}
return false;
}];
Đoạn mã trên trả về mảng đã lọc
Array [ [0] => Array [ [name] => John Doe [email] => john@gmail.com ] [2] => Array [ [name] => Andrew Joe [email] => andrew@gmail.com ] ]
Hàm PHP array_filter[]
lọc các phần tử của một mảng bằng cách sử dụng hàm gọi lại và trả về mảng đã lọc. Ở đây chúng tôi sẽ cung cấp các đoạn mã PHP ngắn để lọc các phần tử của một mảng chứa một giá trị cụ thể. Nó sẽ giúp bạn lọc một mảng dựa trên điều kiện cụ thể
Đoạn mã ví dụ sau sẽ lọc các phần tử của một mảng theo giá trị bằng cách sử dụng các hàm array_filter[]
và strpos[]
trong PHP
$array = array[
'month' => 'January',
'month2' => 'February',
'month3' => 'March'
];$filterArray = array_filter[$array, function [$var] {
return [strpos[$var, 'Jan'] === false];
}];// Output the filtered array
print_r[$filterArray];