The array filter function helps you pick only the items you want from a list. It makes your list smaller by keeping items that match a rule.
Array filter function in PHP
<?php function array_filter(array $array, callable $callback): array { $filteredArray = []; foreach ($array as $key => $value) { if ($callback($value, $key)) { $filteredArray[$key] = $value; } } return $filteredArray; } ?>
The callback function decides if an item stays. It returns true to keep, false to remove.
The original keys are kept in the filtered array.
<?php $numbers = [1, 2, 3, 4, 5]; $evenNumbers = array_filter($numbers, fn($num) => $num % 2 === 0); print_r($evenNumbers);
<?php $emptyArray = []; $filteredEmpty = array_filter($emptyArray, fn($item) => $item > 0); print_r($filteredEmpty);
<?php $singleItem = [10]; $filteredSingle = array_filter($singleItem, fn($item) => $item > 5); print_r($filteredSingle);
<?php $words = ['apple', 'banana', 'avocado']; $filteredWords = array_filter($words, fn($word) => str_starts_with($word, 'a')); print_r($filteredWords);
This program shows the original list of numbers, then filters to keep only even numbers, and prints the result.
<?php // Original list of numbers $numbers = [1, 2, 3, 4, 5, 6]; // Print original list echo "Original numbers:\n"; print_r($numbers); // Filter function to keep only even numbers $evenNumbers = array_filter($numbers, function($number) { return $number % 2 === 0; }); // Print filtered list echo "\nFiltered even numbers:\n"; print_r($evenNumbers); ?>
Time complexity is O(n) because it checks each item once.
Space complexity is O(n) in the worst case if all items pass the filter.
Common mistake: forgetting the callback must return true or false.
Use array_filter when you want to keep items matching a condition. Use array_map if you want to change items instead.
array_filter keeps only items that match a rule you give.
The callback function returns true to keep an item, false to remove it.
It keeps the original keys of the array.
Practice
array_filter do to an array?Solution
Step 1: Understand the purpose of array_filter
The functionarray_filtertests each element with a callback function.Step 2: Determine what happens based on callback result
Elements for which the callback returns true are kept; others are removed.Final Answer:
It keeps only the elements where the callback returns true. -> Option BQuick Check:
array_filter keeps elements with true callback [OK]
- Thinking array_filter sorts the array
- Assuming it changes values to strings
- Believing it removes keys
array_filter with a callback function named isPositive on array $numbers?Solution
Step 1: Recall array_filter syntax
The second argument must be a callable, passed as a string or anonymous function.Step 2: Identify correct callable format
Passing the function name as a string, like 'isPositive', is correct.Final Answer:
array_filter($numbers, 'isPositive'); -> Option DQuick Check:
Callback function name as string [OK]
- Passing callback without quotes
- Swapping argument order
- Using & before function name
$arr = [1, 2, 3, 4, 5]; $result = array_filter($arr, fn($n) => $n % 2 === 0); print_r($result);
Solution
Step 1: Understand the callback function
The callback keeps numbers where $n % 2 === 0, meaning even numbers.Step 2: Identify even numbers and keys
Even numbers in the array are 2 and 4 at keys 1 and 3 respectively.Final Answer:
Array ( [1] => 2 [3] => 4 ) -> Option CQuick Check:
Only even numbers kept with original keys [OK]
- Assuming keys are reindexed
- Keeping odd numbers by mistake
- Confusing array keys with values
array_filter:$data = [10, 15, 20];
$result = array_filter($data, function($x) {
if ($x > 15) return true;
});
print_r($result);Solution
Step 1: Check callback return values
The callback returns true only if $x > 15, but returns nothing (null) otherwise.Step 2: Understand array_filter behavior
Callback must return true or false explicitly; null is treated as false but is unclear and risky.Final Answer:
The callback function does not return false for some values. -> Option AQuick Check:
Callback must return true or false explicitly [OK]
- Missing explicit false return
- Thinking array_filter needs 3 arguments
- Believing print_r can't print arrays
$items = ['apple' => 3, 'banana' => 0, 'cherry' => 5, 'date' => null];, which array_filter call will keep only items with values that are positive numbers (greater than zero)?Solution
Step 1: Understand the goal
We want to keep only values greater than zero (positive numbers).Step 2: Analyze each option
array_filter($items, fn($v) => $v > 0);keeps values where $v > 0, exactly what we want.array_filter($items, fn($v) => (bool)$v);keeps all truthy values, but 0 is false and null is false, so it removes them but also keeps negative numbers if any.array_filter($items);uses default filter which removes falsy values (0, null, false), but does not check for > 0.array_filter($items, fn($v) => $v !== 0);removes only zeros but keeps null and negative numbers.Final Answer:
array_filter($items, fn($v) => $v > 0); -> Option AQuick Check:
Filter with $v > 0 keeps only positive numbers [OK]
- Using default filter which keeps all truthy values
- Filtering only non-zero but allowing null
- Confusing truthy with positive
Ready to prove it?
Pass the test and this pattern moves unknown
