4.13. Finding Elements That Pass a Certain Test
Problem
You want to locate entries in an array that meet certain requirements.
Solution
Use a foreach
loop:
$movies = array(...);
foreach ($movies as $movie) {
if ($movie['box_office_gross'] < 5000000) { $flops[] = $movie; }
}Or array_filter( )
:
$movies = array(...);
function flops($movie) {
return ($movie['box_office_gross'] < 5000000) ? 1 : 0;
}
$flops = array_filter($movies, 'flops');Discussion
The foreach loops are simple; you scroll through
the data and append elements to the return array that match your
criteria.
If you want only the first such element, exit the loop using
break
:
foreach ($movies as $movie) {
if ($movie['box_office_gross'] > 200000000) { $blockbuster = $movie; break; }
}You can also return directly from a function:
function blockbuster($movies) {
foreach ($movies as $movie) {
if ($movie['box_office_gross'] > 200000000) { return $movie; }
}
}With array_filter( )
,
however, you first create a callback function that returns
true for values you want to keep and
false for values you don’t. Using
array_filter( ), you then instruct PHP to process
the array as you do in the foreach.
It’s impossible to bail out early from
array_filter( ), so foreach
provides more flexibility and is simpler to understand. Also,
it’s one of the few cases in which the built-in PHP
function doesn’t clearly outperform user-level code.
See Also
Documentation on array_filter( ) at
http://www.php.net/array-filter.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access