Bird
Raised Fist0
PHPprogramming~10 mins

Array filter function in PHP - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Array filter function
Start with array
↓
Pick first element
↓
Apply filter function
↓
Keep element
↓
Move to next element
↓
More elements?
No→Return filtered array
↩Back to Pick first element
The filter function checks each element with a test. If the test passes, it keeps the element; if not, it skips it. This repeats until all elements are checked.
Execution Sample
PHP
<?php
$numbers = [1, 2, 3, 4, 5];
$even = array_filter($numbers, fn($n) => $n % 2 === 0);
print_r($even);
?>
This code filters the array to keep only even numbers.
Execution Table
StepCurrent ElementCondition ($n % 2 === 0)Keep Element?Filtered Array So Far
111 % 2 === 0 → falseNo[]
222 % 2 === 0 → trueYes[2]
333 % 2 === 0 → falseNo[2]
444 % 2 === 0 → trueYes[2, 4]
555 % 2 === 0 → falseNo[2, 4]
💡 All elements checked, filter complete.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5Final
$numbers[1,2,3,4,5][1,2,3,4,5][1,2,3,4,5][1,2,3,4,5][1,2,3,4,5][1,2,3,4,5][1,2,3,4,5]
$even[][][2][2][2,4][2,4][2,4]
Key Moments - 3 Insights
Why does the filtered array only contain some elements, not all?
Because the filter function tests each element. Only elements passing the condition (true) are kept, as shown in execution_table rows 2 and 4.
Does the original array change after filtering?
No, the original array ($numbers) stays the same throughout, as shown in variable_tracker where $numbers never changes.
What happens if the condition is false for all elements?
The filtered array will be empty because no elements pass the test, similar to execution_table rows where 'Keep Element?' is 'No'.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the filtered array after step 4?
A[2, 3, 4]
B[2, 4]
C[1, 3, 5]
D[1, 2, 3, 4]
💡 Hint
Check the 'Filtered Array So Far' column at step 4 in the execution_table.
At which step does the condition first become true?
AStep 1
BStep 3
CStep 2
DStep 5
💡 Hint
Look at the 'Condition' column in execution_table to find the first 'true' result.
If the filter condition was changed to keep odd numbers, what would be the filtered array after step 5?
A[1, 3, 5]
B[2, 4]
C[1, 2, 3, 4, 5]
D[]
💡 Hint
Think about which numbers are odd in the original array $numbers from variable_tracker.
Concept Snapshot
array_filter(array, callback) → returns new array
Checks each element with callback function
Keeps elements where callback returns true
Original array stays unchanged
Useful to select elements by condition
Full Transcript
The array_filter function in PHP takes an array and a callback function. It checks each element of the array with the callback. If the callback returns true, the element is kept in the new filtered array. If false, the element is skipped. This process repeats for all elements. The original array does not change. For example, filtering even numbers keeps only numbers divisible by 2. The filtered array builds up step by step as elements pass the test.

Practice

(1/5)
1. What does the PHP function array_filter do to an array?
easy
A. It removes all keys from the array.
B. It keeps only the elements where the callback returns true.
C. It changes all values to strings.
D. It sorts the array in ascending order.

Solution

  1. Step 1: Understand the purpose of array_filter

    The function array_filter tests each element with a callback function.
  2. Step 2: Determine what happens based on callback result

    Elements for which the callback returns true are kept; others are removed.
  3. Final Answer:

    It keeps only the elements where the callback returns true. -> Option B
  4. Quick Check:

    array_filter keeps elements with true callback [OK]
Hint: Remember: true keeps, false removes elements [OK]
Common Mistakes:
  • Thinking array_filter sorts the array
  • Assuming it changes values to strings
  • Believing it removes keys
2. Which of the following is the correct syntax to use array_filter with a callback function named isPositive on array $numbers?
easy
A. array_filter($numbers, isPositive);
B. array_filter($numbers, &isPositive);
C. array_filter(isPositive, $numbers);
D. array_filter($numbers, 'isPositive');

Solution

  1. Step 1: Recall array_filter syntax

    The second argument must be a callable, passed as a string or anonymous function.
  2. Step 2: Identify correct callable format

    Passing the function name as a string, like 'isPositive', is correct.
  3. Final Answer:

    array_filter($numbers, 'isPositive'); -> Option D
  4. Quick Check:

    Callback function name as string [OK]
Hint: Callback function names go in quotes [OK]
Common Mistakes:
  • Passing callback without quotes
  • Swapping argument order
  • Using & before function name
3. What is the output of the following PHP code?
$arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, fn($n) => $n % 2 === 0);
print_r($result);
medium
A. Array ( [0] => 2 [1] => 4 )
B. Array ( [0] => 1 [2] => 3 [4] => 5 )
C. Array ( [1] => 2 [3] => 4 )
D. Array ( [0] => 2 [2] => 4 )

Solution

  1. Step 1: Understand the callback function

    The callback keeps numbers where $n % 2 === 0, meaning even numbers.
  2. Step 2: Identify even numbers and keys

    Even numbers in the array are 2 and 4 at keys 1 and 3 respectively.
  3. Final Answer:

    Array ( [1] => 2 [3] => 4 ) -> Option C
  4. Quick Check:

    Only even numbers kept with original keys [OK]
Hint: Check which elements return true, keys stay same [OK]
Common Mistakes:
  • Assuming keys are reindexed
  • Keeping odd numbers by mistake
  • Confusing array keys with values
4. Identify the error in this PHP code using array_filter:
$data = [10, 15, 20];
$result = array_filter($data, function($x) {
  if ($x > 15) return true;
});
print_r($result);
medium
A. The callback function does not return false for some values.
B. array_filter requires a third argument for keys.
C. The array must be associative for array_filter to work.
D. The print_r function cannot print arrays.

Solution

  1. Step 1: Check callback return values

    The callback returns true only if $x > 15, but returns nothing (null) otherwise.
  2. Step 2: Understand array_filter behavior

    Callback must return true or false explicitly; null is treated as false but is unclear and risky.
  3. Final Answer:

    The callback function does not return false for some values. -> Option A
  4. Quick Check:

    Callback must return true or false explicitly [OK]
Hint: Always return true or false in callback [OK]
Common Mistakes:
  • Missing explicit false return
  • Thinking array_filter needs 3 arguments
  • Believing print_r can't print arrays
5. Given an array $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)?
hard
A. array_filter($items, fn($v) => $v > 0);
B. array_filter($items, fn($v) => (bool)$v);
C. array_filter($items);
D. array_filter($items, fn($v) => $v !== 0);

Solution

  1. Step 1: Understand the goal

    We want to keep only values greater than zero (positive numbers).
  2. 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.
  3. Final Answer:

    array_filter($items, fn($v) => $v > 0); -> Option A
  4. Quick Check:

    Filter with $v > 0 keeps only positive numbers [OK]
Hint: Use explicit condition for positive numbers [OK]
Common Mistakes:
  • Using default filter which keeps all truthy values
  • Filtering only non-zero but allowing null
  • Confusing truthy with positive
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard