0

我有返回以下多维数组的函数。我无法控制数组的形成方式。我试图访问“结果”元素。这个问题是,父元素的名称不断变化。“结果”元素的位置始终相同(因为名称“结果”)。是否可以在不知道父元素名称的情况下访问该元素?

    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
                    )

            )

    )

)

4

4 回答 4

1

递归搜索数组键/值的一个简单选项是使用递归迭代器;这些是内置类,是标准 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())。

于 2013-05-19T23:05:13.957 回答
0

如果父元素只有一个子元素,您可以通过获取返回的唯一元素array_keys(),并深入两层来解决它。

无论如何,如果您的数组发生很大变化,并且您必须系统地访问嵌套属性,那么您肯定会遇到设计问题。

于 2013-05-19T22:07:27.550 回答
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;
}
于 2013-05-19T22:16:43.663 回答
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;
                }
            }
        }
    }
}
于 2013-05-19T23:05:31.753 回答