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
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.
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;
}
}
}
}
}
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;
}
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()
).