Recipe 4.14 Finding Elements That Pass a Certain Test
4.14.1 Problem
You want to
locate entries in an array that meet certain requirements.
4.14.2 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');
4.14.3 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.
4.14.4 See Also
Documentation on array_filter( ) at
http://www.php.net/array-filter.
|