Fan Beko
Fan Beko

Reputation: 87

Find the first row with a qualifying column value in a multidimensional array

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

Answers (2)

mickmackusa
mickmackusa

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

AbraCadaver
AbraCadaver

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

Related Questions