Reputation: 87
How I can search by value of key [sub1] in multi-dimensional array and display impressions and earnings from there. Array rows can have unlimited of countries.
Array
(
[rows] => Array
(
[0] => Array
(
[sub1] => Spain
[impressions] => 1022
[earnings] => 0.13
)
[1] => Array
(
[sub1] => Germany
[impressions] => 801
[earnings] => 0.01
)
[2] => Array
(
[sub1] => Italy
[impressions] => 684
[earnings] => 0.35
)
)
)
Upvotes: 0
Views: 40
Reputation: 47894
array_find()
is available since PHP8.4 and will either return the first matching value (a row in this case) or null. From this returned value, you can access the relevant associative values. This is as performant as a functional-style value search can be because, under the hood, this function short circuits when it finds a match. Demo
$find = 'Germany';
var_export(
array_find(
$array['rows'],
fn($row) => $row['sub1'] === $find
)
);
Upvotes: 0
Reputation: 78994
If sub1
is unique, then just re-index by that and then it's easy to access using the country:
$lookup = array_column($array['rows'], null, 'sub1');
echo $lookup['Italy']['impressions'];
Maybe test for a valid country first:
if(isset($lookup['Italy'])) {
echo $lookup['Italy']['impressions'];
}
Upvotes: 1