Access Multidimensional Array element with out knowing parent elements

后端 未结 4 930
忘了有多久
忘了有多久 2021-01-16 22:25

I have function that returns the following multidimensional array. I don\'t have control of how the array is formed. Im trying to access the \'Result\' elements. This issue

相关标签:
4条回答
  • 2021-01-16 22:55

    If the parent elements have only one child, you can solve it by getting the only element given back by array_keys(), and going two levels deep.

    Anyway, if your array changes that much, and you systematically have to access a nested property, you have a design issue for sure.

    0 讨论(0)
  • 2021-01-16 23:02
    function findkeyval($arr,$key) {
        if(isset($arr[$key])) {
            return $arr[$key];
        }else {
            foreach($arr as $a) {
                if(is_array($a)) {
                    $val=findkeyval($a,$key);
                    if($val) {
                       return $val;
                    }
                }
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-16 23:06

    Edit: array_column won't actually work in this case. You could search through each level, recursively, until you find the given key. Something like:

    function find_key_value($array, $search_key) {
        if (isset($array[$search_key])) return $array[$search_key];
        $found = false;
        foreach ($array as $key=>$value) {
             if (is_array($value)) $found = find_key_value($value, $search_key);
             if ($found) return $found; 
        }
        return false;
    }
    
    0 讨论(0)
  • 2021-01-16 23:14

    An easy option to search the array keys/values recursively is to use a recursive iterator; these are built-in classes, part of the Standard PHP Library.

    $result   = false;
    $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
    foreach ($iterator as $key => $value) {
        if ($key === 'Result') {
            $result = $value;
            break;
        }
    }
    
    var_dump($result);
    

    The bonus here is that you could, if you wanted to, check the depth of the Result item ($iterator->getDepth()) in the array structure and/or check one or more ancestor keys ($iterator->getSubIterator(…)->key()).

    0 讨论(0)
提交回复
热议问题