我有一个函数,它返回以下多维数组。我无法控制数组的形成。我试图访问"结果"元素。这个问题是,父元素的名称不断变化。'Result'元素的位置总是相同的(因为名称是"Result")。是否有可能在不知道父元素名称的情况下访问该元素?
Array
(
[sHeader] => Array
(
[aAction] => ActionHere
)
[sBody] => Array
(
[CreatePropertyResponse] => Array
(
[CreatePropertyResult] => Array
(
[Message] => Successfully completed the operation
[Result] => 0
[TransactionDate] => 2013-05-19T21:54:35.765625Z
[bPropertyId] => 103
)
)
)
)
递归搜索数组键/值的一个简单方法是使用递归迭代器;这些都是内置类,是标准PHP库的一部分。
$result = false;
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
foreach ($iterator as $key => $value) {
if ($key === 'Result') {
$result = $value;
break;
}
}
var_dump($result);
这里的好处是,如果您愿意,您可以检查数组结构中Result
项($iterator->getDepth()
)的深度和/或检查一个或多个祖先键($iterator->getSubIterator(…)->key()
)。
如果父元素只有一个子元素,则可以通过获取array_keys()
返回的唯一元素并深入两层来解决。
Edit: array_column在这种情况下实际上不起作用。你可以递归地搜索每一层,直到找到给定的键。比如:
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;
}
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;
}
}
}
}
}