Kodealgo

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.

  1. Sintaks
  2. Contoh
    1. Filter Bilangan Genap
    2. Filter Array Multidimensi

Sintaks

array_filter(array $array, ?callable $callback = null, int $mode = 0): array

Parameter

  • array - array yang ingin difilter.
  • callback (opsional, default null) - fungsi penyaring, jika tidak diberikan, fungsi akan menghapus elemen array kosong (empty()) seperti null, 0, false dan sebagainya. Jika diberikan, fungsi ini harus mengembalikan nilai true untuk menyaring elemen yang diinginkan.
  • mode (opsional, default null) - menentukan argumen apa yang dikirim ke callback, dapat berupa integer atau konstanta berikut:
    • ARRAY_FILTER_USE_KEY (0) - kunci array sebagai satu-satunya argumen yang diberikan ke argumen callback.
    • ARRAY_FILTER_USE_BOTH (1) - kunci dan nilai array sebagai argumen callback.

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)
//   }
// }