Bird
Raised Fist0
PHPprogramming~10 mins

Closures in array functions in PHP - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to filter numbers greater than 5 using array_filter and a closure.

PHP
<?php
$numbers = [2, 5, 8, 1, 10];
$filtered = array_filter($numbers, function($num) {
    return $num [1] 5;
});
print_r($filtered);
?>
Drag options to blanks, or click blank then click option'
A!=
B<
C==
D>
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<' instead of '>' will filter numbers less than 5.
Using '==' will only keep numbers equal to 5.
2fill in blank
medium

Complete the code to double each number in the array using array_map and a closure.

PHP
<?php
$numbers = [1, 2, 3, 4];
$doubled = array_map(function($num) {
    return $num [1] 2;
}, $numbers);
print_r($doubled);
?>
Drag options to blanks, or click blank then click option'
A+
B/
C*
D-
Attempts:
3 left
💡 Hint
Common Mistakes
Using '+' will add 2 instead of doubling.
Using '-' or '/' will not double the number.
3fill in blank
hard

Fix the error in the closure to correctly filter even numbers using array_filter.

PHP
<?php
$numbers = [1, 2, 3, 4, 5];
$evens = array_filter($numbers, function($num) {
    return $num [1] 2 == 0;
});
print_r($evens);
?>
Drag options to blanks, or click blank then click option'
A%
B/
C*
D+
Attempts:
3 left
💡 Hint
Common Mistakes
Using '/' will perform division, not remainder.
Using '*' or '+' will not check for even numbers.
4fill in blank
hard

Fill both blanks to create an array of squares for numbers greater than 3 using array_map and array_filter with closures.

PHP
<?php
$numbers = [1, 2, 3, 4, 5];
$filtered = array_filter($numbers, function($num) {
    return $num [1] 3;
});
$squares = array_map(function($num) {
    return $num [2] $num;
}, $filtered);
print_r($squares);
?>
Drag options to blanks, or click blank then click option'
A>
B*
C+
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<' will filter numbers less than 3.
Using '+' instead of '*' will add numbers instead of squaring.
5fill in blank
hard

Fill all three blanks to create an associative array with uppercase keys and values filtered by length greater than 4 using closures.

PHP
<?php
$words = ['apple', 'bat', 'carrot', 'dog'];
$result = array_filter(array_combine(array_map(function($word) {
    return [1];
}, $words), $words), function($word) {
    return strlen($word) [2] 4;
});
$result = array_map(function($word) {
    return [3];
}, $result);
print_r($result);
?>
Drag options to blanks, or click blank then click option'
Astrtoupper($word)
B>
D<
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<' will filter words with length less than or equal to 4.
Not converting keys or values to uppercase will not meet the requirement.

Practice

(1/5)
1. What is the main purpose of using a closure inside PHP array functions like array_map or array_filter?
easy
A. To define a small, unnamed function that processes array elements inline
B. To declare a global variable accessible inside the array
C. To create a new array without any function
D. To convert arrays into strings automatically

Solution

  1. Step 1: Understand what a closure is

    A closure is a small, unnamed function that can be used directly where needed.
  2. Step 2: Role in array functions

    Closures let you write the logic for processing each array element inline, making code concise and clear.
  3. Final Answer:

    To define a small, unnamed function that processes array elements inline -> Option A
  4. Quick Check:

    Closure = small inline function [OK]
Hint: Closures are small functions used directly inside array calls [OK]
Common Mistakes:
  • Thinking closures declare global variables
  • Confusing closures with array conversion functions
  • Assuming closures create arrays without functions
2. Which of the following is the correct syntax to use a closure with array_filter to keep only even numbers from an array $numbers?
easy
A. array_filter($numbers, function $n { return $n % 2 == 0; });
B. array_filter($numbers, function($n) { return $n % 2 == 0; });
C. array_filter($numbers, function($n) => $n % 2 == 0;);
D. array_filter($numbers, function($n) { $n % 2 == 0; });

Solution

  1. Step 1: Check closure syntax

    Correct closure syntax uses function($param) { return expression; }.
  2. 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.
  3. Final Answer:

    array_filter($numbers, function($n) { return $n % 2 == 0; }); -> Option B
  4. Quick Check:

    Closure syntax needs parentheses and return [OK]
Hint: Closures need parentheses and return keyword inside curly braces [OK]
Common Mistakes:
  • Omitting parentheses around parameters
  • Using arrow syntax incorrectly in PHP 7+
  • Forgetting to return a value inside closure
3. What will be the output of the following PHP code?
$nums = [1, 2, 3, 4];
$result = array_map(function($x) { return $x * 3; }, $nums);
print_r($result);
medium
A. [0, 3, 6, 9]
B. [1, 2, 3, 4]
C. [3, 6, 9, 12]
D. Syntax error

Solution

  1. Step 1: Understand array_map with closure

    array_map applies the closure to each element, multiplying by 3.
  2. Step 2: Calculate each element

    1*3=3, 2*3=6, 3*3=9, 4*3=12, so result is [3, 6, 9, 12].
  3. Final Answer:

    [3, 6, 9, 12] -> Option C
  4. Quick Check:

    Multiply each by 3 = [3,6,9,12] [OK]
Hint: array_map applies closure to each element and returns new array [OK]
Common Mistakes:
  • Expecting original array unchanged
  • Confusing array_map with array_filter
  • Thinking output is a string, not array
4. Identify the error in this PHP code using a closure with array_filter:
$values = [10, 15, 20];
$filtered = array_filter($values, function($v) {
  if ($v > 10) {
    return true;
  }
});
print_r($filtered);
medium
A. The closure does not return false for values <= 10, causing unexpected filtering
B. The array_filter function requires a named function, not a closure
C. The array_filter call is missing the array parameter
D. The closure syntax is invalid without a semicolon after return

Solution

  1. Step 1: Analyze closure return behavior

    The closure returns true only if value > 10, but returns nothing (null) otherwise.
  2. 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.
  3. Final Answer:

    The closure does not return false for values <= 10, causing unexpected filtering -> Option A
  4. Quick Check:

    Closure must return true or false explicitly [OK]
Hint: Always return true or false explicitly in closures for array_filter [OK]
Common Mistakes:
  • Not returning false explicitly in closure
  • Thinking closures must be named functions
  • Missing array parameter in array_filter
5. Given an array $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?
hard
A. array_filter(fn($x) => $x % 2 !== 0, array_map($data, fn($x) => $x * $x));
B. array_filter(array_map($data, fn($x) => $x * $x), fn($x) => $x % 2 !== 0);
C. array_map(array_filter($data, fn($x) => $x % 2 !== 0), fn($x) => $x * $x);
D. array_map(fn($x) => $x * $x, array_filter($data, fn($x) => $x % 2 !== 0));

Solution

  1. Step 1: Filter odd numbers first

    Use array_filter with closure to keep only odd numbers: fn($x) => $x % 2 !== 0.
  2. Step 2: Map squares of filtered numbers

    Apply array_map with closure to square each filtered number: fn($x) => $x * $x.
  3. Step 3: Combine calls correctly

    Pass filtered array as second argument to array_map, so filtering happens before mapping.
  4. Final Answer:

    array_map(fn($x) => $x * $x, array_filter($data, fn($x) => $x % 2 !== 0)); -> Option D
  5. Quick Check:

    Filter odds then map squares [OK]
Hint: Filter first, then map to transform filtered results [OK]
Common Mistakes:
  • Reversing order of array_map and array_filter
  • Passing arguments in wrong order
  • Using array_map or array_filter with wrong parameter order
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