我有返回以下多维数组的函数。我无法控制阵列的形成方式。我试图访问'结果'元素。这个问题是,父元素的名称不断变化。 '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
)
)
)
)
答案 0 :(得分:1)
递归搜索数组键/值的简单选项是使用递归迭代器;这些是内置类,是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);
这里的奖励是你可以,如果你想,检查数组结构中Result
项($iterator->getDepth()
)的深度和/或检查一个或多个祖先键({{ 1}})。
答案 1 :(得分:0)
如果父元素只有一个子元素,则可以通过获取array_keys()
返回的唯一元素并进入两个级别来解决它。
无论如何,如果您的数组 更多,并且系统地必须访问嵌套属性,那么您肯定会遇到设计问题。
答案 2 :(得分:0)
编辑:在这种情况下,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;
}
答案 3 :(得分:0)
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;
}
}
}
}
}