4.14.1 Problem
4.14.2 Solution
$movies = array(...);
foreach ($movies as $movie) {
if ($movie['box_office_gross'] < 5000000) { $flops[] = $movie; }
}
$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.
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.