user1114748
user1114748

Reputation: 99

Looking for a value in a multidimensional array in PHP

I have this kind of array:

array(1) {
    [36694730] => array(2) {
        ["summonerId"] => int(36694730)
        ["pages"] => array(6) {
            [0] => array(4) {
                ["id"] => int(35938350)
                ["name"] => string(10) "Fervor ADC"
                ["current"] => bool(true)
                ["masteries"] => array(10) {
                    [0] => array(2) { ["id"] => int(6343) ["rank"] => int(1) }
                    [1] => array(2) { ["id"] => int(6131) ["rank"] => int(5) }
                    [2] => array(2) { ["id"] => int(6122) ["rank"] => int(1) }
                    [3] => array(2) { ["id"] => int(6331) ["rank"] => int(5) }
                    [4] => array(2) { ["id"] => int(6111) ["rank"] => int(5) }
                    [5] => array(2) { ["id"] => int(6141) ["rank"] => int(1) }
                    [6] => array(2) { ["id"] => int(6312) ["rank"] => int(5) }
                    [7] => array(2) { ["id"] => int(6322) ["rank"] => int(1) }
                    [8] => array(2) { ["id"] => int(6162) ["rank"] => int(1) }
                    [9] => array(2) { ["id"] => int(6151) ["rank"] => int(5) }
                }
            }[1] => array(4) {
                ["id"] => int(35938366)
                ["name"] => string(15) "Thunderlord ADC"
                ["current"] => bool(false)
                ["masteries"] => array(10) {
                    [0] => array(2) { ["id"] => int(6121) ["rank"] => int(1) }
                    [1] => array(2) { ["id"] => int(6343) ["rank"] => int(1) }
                    [2] => array(2) { ["id"] => int(6131) ["rank"] => int(5) }
                    [3] => array(2) { ["id"] => int(6331) ["rank"] => int(5) }
                    [4] => array(2) { ["id"] => int(6111) ["rank"] => int(5) }
                    [5] => array(2) { ["id"] => int(6141) ["rank"] => int(1) }
                    [6] => array(2) { ["id"] => int(6312) ["rank"] => int(5) }
                    [7] => array(2) { ["id"] => int(6322) ["rank"] => int(1) }
                    [8] => array(2) { ["id"] => int(6362) ["rank"] => int(1) }
                    [9] => array(2) { ["id"] => int(6352) ["rank"] => int(5) }

                }
            }[2] => array(4) {
                ["id"] => int(35938367)
                ["name"] => string(7) "Twisted"
                ["current"] => bool(false)
                ["masteries"] => array(10) {
                    [0] => array(2) { ["id"] => int(6121) ["rank"] => int(1) }
                    [1] => array(2) { ["id"] => int(6114) ["rank"] => int(5) }
                    [2] => array(2) { ["id"] => int(6131) ["rank"] => int(5) }
                    [3] => array(2) { ["id"] => int(6343) ["rank"] => int(1) }
                    [4] => array(2) { ["id"] => int(6331) ["rank"] => int(5) }
                    [5] => array(2) { ["id"] => int(6142) ["rank"] => int(1) }
                    [6] => array(2) { ["id"] => int(6312) ["rank"] => int(5) }
                    [7] => array(2) { ["id"] => int(6322) ["rank"] => int(1) }
                    [8] => array(2) { ["id"] => int(6351) ["rank"] => int(5) }
                    [9] => array(2) { ["id"] => int(6362) ["rank"] => int(1) }

                }
            }[3] => array(4) {
                ["id"] => int(35938368)
                ["name"] => string(13) "CaptainJungle"
                ["current"] => bool(false)
                ["masteries"] => array(10) {
                    [0] => array(2) { ["id"] => int(6121) ["rank"] => int(1) }
                    [1] => array(2) { ["id"] => int(6343) ["rank"] => int(1) }
                    [2] => array(2) { ["id"] => int(6114) ["rank"] => int(5) }
                    [3] => array(2) { ["id"] => int(6331) ["rank"] => int(5) }
                    [4] => array(2) { ["id"] => int(6321) ["rank"] => int(1) }
                    [5] => array(2) { ["id"] => int(6141) ["rank"] => int(1) }
                    [6] => array(2) { ["id"] => int(6312) ["rank"] => int(5) }
                    [7] => array(2) { ["id"] => int(6134) ["rank"] => int(5) }
                    [8] => array(2) { ["id"] => int(6362) ["rank"] => int(1) }
                    [9] => array(2) { ["id"] => int(6352) ["rank"] => int(5) }

                }
            }[4] => array(4) {
                ["id"] => int(35938369)
                ["name"] => string(6) "TeeTop"
                ["current"] => bool(false)
                ["masteries"] => array(10) {
                    [0] => array(2) { ["id"] => int(6343) ["rank"] => int(1) }
                    [1] => array(2) { ["id"] => int(6131) ["rank"] => int(5) }
                    [2] => array(2) { ["id"] => int(6122) ["rank"] => int(1) }
                    [3] => array(2) { ["id"] => int(6331) ["rank"] => int(5) }
                    [4] => array(2) { ["id"] => int(6111) ["rank"] => int(5) }
                    [5] => array(2) { ["id"] => int(6312) ["rank"] => int(5) }
                    [6] => array(2) { ["id"] => int(6142) ["rank"] => int(1) }
                    [7] => array(2) { ["id"] => int(6322) ["rank"] => int(1) }
                    [8] => array(2) { ["id"] => int(6351) ["rank"] => int(5) }
                    [9] => array(2) { ["id"] => int(6362) ["rank"] => int(1) }

                }
            }[5] => array(4) {
                ["id"] => int(35938370)
                ["name"] => string(13) "ThreshShields"
                ["current"] => bool(false)
                ["masteries"] => array(10) {
                    [0] => array(2) { ["id"] => int(6223) ["rank"] => int(1) }
                    [1] => array(2) { ["id"] => int(6241) ["rank"] => int(1) }
                    [2] => array(2) { ["id"] => int(6343) ["rank"] => int(1) }
                    [3] => array(2) { ["id"] => int(6312) ["rank"] => int(5) }
                    [4] => array(2) { ["id"] => int(6322) ["rank"] => int(1) }
                    [5] => array(2) { ["id"] => int(6332) ["rank"] => int(5) }
                    [6] => array(2) { ["id"] => int(6212) ["rank"] => int(5) }
                    [7] => array(2) { ["id"] => int(6231) ["rank"] => int(5) }
                    [8] => array(2) { ["id"] => int(6363) ["rank"] => int(1) }
                    [9] => array(2) { ["id"] => int(6352) ["rank"] => int(5) }

                }
            }
        }
    }
}

I want to see if an item with a specific "name" key, (for example "Fervor ADC") exists in it, in order to use it for a membership verification. How can I look for it knowing that the array can have more values? The [0] to [4] here are the number of pages and it varies from 1 to 20.

Upvotes: 1

Views: 26

Answers (2)

Rahul Patel
Rahul Patel

Reputation: 5246

//Will comes to know value exist or not in array

echo in_array_r("Fervor ADC", $array) ? 'found' : 'not found';

//function to find a value exist or not in array.

function in_array_r($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
            return true;
        }
    }

    return false;
}

Upvotes: 1

Don't Panic
Don't Panic

Reputation: 41810

Initialize a result and search term

$result = null;
$searchName = "Fervor ADC"

Loop over the values in the 'pages' key:

foreach ($your_array['36694730']['pages'] as $x) {

    // if you find one that matches your search term, set your result to that one
    if ($x['name'] == $searchName) {
        $result = $x;

        // then stop the loop; you're done.
        break;
    }
}

Then if you just want to verify that it exists

if ($result)

will work. And if you end up needing to do anything else with the data associated with that name, then you'll have it available in $result.

Upvotes: 1

Related Questions