You want to locate entries in an array that meet certain requirements.
Use a foreach loop:
1 2 3 4 5 |
$movies = array(/*...*/); foreach ($movies as $movie) { if ($movie['box_office_gross'] < 5000000) { $flops[] = $movie; } } |
Or array_filter():
1 2 3 4 5 |
$movies = array(/* ... */); $flops = array_filter($movies, function ($movie) { return ($movie['box_office_gross'] < 5000000) ? 1 : 0; }); |
The foreach loops are simple: you iterate 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:
1 2 3 4 |
$movies = array(/*...*/); foreach ($movies as $movie) { if ($movie['box_office_gross'] > 200000000) { $blockbuster = $movie; break; } } |
You can also return directly from a function:
1 2 3 4 5 |
function blockbuster($movies) { foreach ($movies as $movie) { if ($movie['box_office_gross'] > 200000000) { return $movie; } } } |
With array_filter(), however, you first create an anonymous function that returns true for values you want to keep and false for values you don’t.
Using array_fil ter(), 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.