2013-05-19 138 views
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 
        ) 

      ) 

    ) 

回答

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())的深度和/或檢查一個或多個祖先鍵($iterator->getSubIterator(…)->key())。

0

如果父元素都只有一個孩子,你可以通過獲取由array_keys()給予回覆的唯一元素,而深要去兩個層面解決這個問題。

無論如何,如果你的數組更改太多了,而且你係統地訪問一個嵌套屬性,你肯定有設計問題。

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; 
} 
+0

'array_column'只是一個採摘,但沒有進入任意深度,不是嗎? – moonwave99

+0

只搜索1維數組 –

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; 
       } 
      } 
     } 
    } 
}