array_filter PHP
array_filter merupakan fungsi bawaan PHP yang dapat digunakan untuk memfilter atau menyaring elemen array berdasarkan fungsi callback yang diberikan.
Ketika iterasi, setiap elemen array akan diteruskan sebagai argumen fungsi, fungsi ini kemudian menentukan logika penyaringan, jika fungsi mengembalikan true maka elemen tersebut akan masuk dalam penyaringan, jika false maka akan dibuang.
Berikut beberapa topik terkait array_filter PHP yang akan kita bahas.
Sintaks
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
Parameter
array- array yang ingin difilter.callback(opsional, defaultnull) - fungsi penyaring, jika tidak diberikan, fungsi akan menghapus elemen array kosong (empty()) sepertinull,0,falsedan sebagainya. Jika diberikan, fungsi ini harus mengembalikan nilaitrueuntuk menyaring elemen yang diinginkan.mode(opsional, defaultnull) - menentukan argumen apa yang dikirim kecallback, dapat berupa integer atau konstanta berikut:ARRAY_FILTER_USE_KEY(0) - kunci array sebagai satu-satunya argumen yang diberikan ke argumencallback.ARRAY_FILTER_USE_BOTH(1) - kunci dan nilai array sebagai argumencallback.
Nilai Kembalian
Mengembalikan array dimana setiap elemennya jika diuji dengan fungsi callback mengembalikan nilai true.
Contoh
Filter Bilangan Genap
Contoh berikut, kita memiliki array $array berisi elemen angka ganjil dan genap, kita ingin menyaring semua angka genap atau elemen yang jika dibagi 2 sisabaginya adalah 0.
$array = [1, 2, 3, 5, 6, 7, 8, 9];
$arrayEven = array_filter($array, function ($element) {
return $element % 2 === 0;
});
var_dump($arrayEven);
// array(3) {
// [1]=>
// int(2)
// [4]=>
// int(6)
// [6]=>
// int(8)
// }
Perhatikan fungsi callback diatas, fungsi ini akan dieksekusi untuk setiap elemen array secara berurutan dimana nilai argumen $element adalah elemen array yang sedang diiterasi saat ini.
Array hasil filter ditampung ke oleh variabel $arrayEven, array ini akan berisi elemen-elemen yang jika setiap elemen diuji satu per satu dengan fungsi callback mengembalikan nilai true atau array hasil penyaringan.
Fungsi callback tidak harus ditulis sebaris atau menggunakan anonymous function seperti contoh diatas, kita bisa mendeklarasaikannya sebelum fungsi arrayFilter.
Contoh berikut akan berperilaku sama dengan contoh diatas, kita meneruskan fungsi isEven sebagai callback.
// ...
function isEven($element)
{
return $element % 2 === 0;
};
$arrayEven = array_filter($array, 'isEven');
// ...
Atau, karena kode di dalam fungsi pemfilter hanya sebaris, kita bisa menggunakan arrow function seperti berikut.
// ...
$arrayEven = array_filter($array, fn ($element) => $element % 2 === 0);
// ...
Filter Array Multidimensi
Misalnya, kita memiliki array $fruits (buah) dimana masing-masing memiliki nama dan harga, kita ingin memfilter semua buah yang memiliki harga diatas 50 ribu.
Karakter garis bawah pada angka harga digunakan untuk keterbacaan, tidak mempengaruhi nilainya, ini sudah kita bahas di artikel tentang tipe data integer.
$fruits = [
[
'name' => 'banana',
'price' => 45_000
],
[
'name' => 'orange',
'price' => 55_000
],
[
'name' => 'grape',
'price' => 47_000
],
[
'name' => 'mango',
'price' => 50_000
],
];
$fruitsGteFiftyThousand = array_filter($fruits, function ($fruit) {
return $fruit['price'] >= 50_000;
});
var_dump($fruitsGteFiftyThousand);
// array(2) {
// [1]=>
// array(2) {
// ["name"]=>
// string(6) "orange"
// ["price"]=>
// int(55000)
// }
// [3]=>
// array(2) {
// ["name"]=>
// string(5) "mango"
// ["price"]=>
// int(50000)
// }
// }