Closures let you write small, quick functions inside array functions to change or check each item easily.
Closures in array functions in PHP
<?php // Example of using a closure with array_map $array = [1, 2, 3]; $newArray = array_map(function($item) { return $item * 2; }, $array); ?>
A closure is an anonymous function you write right where you use it.
Array functions like array_map, array_filter, and array_reduce accept closures to work on each item.
<?php // Double each number in the array $numbers = [1, 2, 3]; $doubled = array_map(function($number) { return $number * 2; }, $numbers); print_r($doubled); ?>
<?php // Filter out numbers less than 3 $numbers = [1, 2, 3, 4]; $filtered = array_filter($numbers, function($number) { return $number >= 3; }); print_r($filtered); ?>
<?php // Sum all numbers $numbers = [1, 2, 3]; $sum = array_reduce($numbers, function($carry, $item) { return $carry + $item; }, 0); echo $sum; ?>
<?php // Check if any number is even $numbers = [1, 3, 5, 6]; $hasEven = array_filter($numbers, function($number) { return $number % 2 === 0; }); if (!empty($hasEven)) { echo "There is an even number."; } else { echo "No even numbers."; } ?>
This program shows how closures work with array functions to change, filter, and add numbers in a list.
<?php // Create an array of numbers $numbers = [1, 2, 3, 4, 5]; // Print original array echo "Original array:\n"; print_r($numbers); // Use closure with array_map to square each number $squaredNumbers = array_map(function($number) { return $number * $number; }, $numbers); echo "\nSquared numbers:\n"; print_r($squaredNumbers); // Use closure with array_filter to keep only numbers greater than 10 $filteredNumbers = array_filter($squaredNumbers, function($number) { return $number > 10; }); echo "\nFiltered numbers (greater than 10):\n"; print_r($filteredNumbers); // Use closure with array_reduce to sum all filtered numbers $sum = array_reduce($filteredNumbers, function($carry, $item) { return $carry + $item; }, 0); echo "\nSum of filtered numbers: $sum\n"; ?>
Time complexity depends on the array size and the function inside the closure.
Closures use little extra memory but keep your code clean and easy to read.
Common mistake: forgetting to return a value inside the closure.
Use closures in array functions when you want quick, small operations on each item without writing separate named functions.
Closures are small, unnamed functions used inside array functions.
They help you change, filter, or combine array items easily.
Using closures keeps your code short and clear.
Practice
closure inside PHP array functions like array_map or array_filter?Solution
Step 1: Understand what a closure is
A closure is a small, unnamed function that can be used directly where needed.Step 2: Role in array functions
Closures let you write the logic for processing each array element inline, making code concise and clear.Final Answer:
To define a small, unnamed function that processes array elements inline -> Option AQuick Check:
Closure = small inline function [OK]
- Thinking closures declare global variables
- Confusing closures with array conversion functions
- Assuming closures create arrays without functions
array_filter to keep only even numbers from an array $numbers?Solution
Step 1: Check closure syntax
Correct closure syntax usesfunction($param) { return expression; }.Step 2: Validate each option
array_filter($numbers, function($n) { return $n % 2 == 0; }); uses correct syntax with return statement. array_filter($numbers, function $n { return $n % 2 == 0; }); misses parentheses. array_filter($numbers, function($n) => $n % 2 == 0;); uses arrow syntax incorrectly. array_filter($numbers, function($n) { $n % 2 == 0; }); lacks return keyword.Final Answer:
array_filter($numbers, function($n) { return $n % 2 == 0; }); -> Option BQuick Check:
Closure syntax needs parentheses and return [OK]
- Omitting parentheses around parameters
- Using arrow syntax incorrectly in PHP 7+
- Forgetting to return a value inside closure
$nums = [1, 2, 3, 4];
$result = array_map(function($x) { return $x * 3; }, $nums);
print_r($result);Solution
Step 1: Understand array_map with closure
array_map applies the closure to each element, multiplying by 3.Step 2: Calculate each element
1*3=3, 2*3=6, 3*3=9, 4*3=12, so result is [3, 6, 9, 12].Final Answer:
[3, 6, 9, 12] -> Option CQuick Check:
Multiply each by 3 = [3,6,9,12] [OK]
- Expecting original array unchanged
- Confusing array_map with array_filter
- Thinking output is a string, not array
array_filter:
$values = [10, 15, 20];
$filtered = array_filter($values, function($v) {
if ($v > 10) {
return true;
}
});
print_r($filtered);Solution
Step 1: Analyze closure return behavior
The closure returns true only if value > 10, but returns nothing (null) otherwise.Step 2: Understand array_filter behavior
array_filter expects explicit boolean returns. Returning implicit null (falsy) for values <=10 removes them but can cause unexpected filtering behavior.Final Answer:
The closure does not return false for values <= 10, causing unexpected filtering -> Option AQuick Check:
Closure must return true or false explicitly [OK]
- Not returning false explicitly in closure
- Thinking closures must be named functions
- Missing array parameter in array_filter
$data = [1, 2, 3, 4, 5, 6], how can you use a closure with array_filter and array_map together to get an array of squares of only the odd numbers?Solution
Step 1: Filter odd numbers first
Use array_filter with closure to keep only odd numbers:fn($x) => $x % 2 !== 0.Step 2: Map squares of filtered numbers
Apply array_map with closure to square each filtered number:fn($x) => $x * $x.Step 3: Combine calls correctly
Pass filtered array as second argument to array_map, so filtering happens before mapping.Final Answer:
array_map(fn($x) => $x * $x, array_filter($data, fn($x) => $x % 2 !== 0)); -> Option DQuick Check:
Filter odds then map squares [OK]
- Reversing order of array_map and array_filter
- Passing arguments in wrong order
- Using array_map or array_filter with wrong parameter order
Ready to prove it?
Pass the test and this pattern moves unknown
