2013-10-29 75 views
0

我有超過4級的嵌套關聯數組。有些值達到全部4個等級,而一些則以第一等級結束。現在我如何訪問來自php的所有值。在php中訪問不均勻的高級聯合數組

對於2級陣列I可以只是:

foreach($options as $o){ 
    foreach($m as $check){ 
     if(isset($check[$o])) echo $check[$o]; 
    } 
} 

,以檢查是否一個值被設置,然後使用它。 但是,我該如何做到這一點深度未知或水平不均衡的陣列。

+3

'遞歸'是您的關鍵字。 (但是你也可以用包含當前數組的變量來循環) – ComFreek

+1

你應該看看['array_walk_recursive'](http://php.net/manual/en/function.array-walk-recursive.php )功能。 – toro2k

回答

0

可以使用遞歸函數像這樣:

<?php 
    function getSetValues($array, $searchKeys) { 
     $values = array(); 
     foreach ($array as $key => $value) { 
      if (is_array($value)) { 
       $values = array_merge($values, getSetValues($value, $searchKeys)); 
      } else if (in_array($key, $searchKeys)) { 
       $values[] = $value; 
      } 
     } 
     return $values; 
    } 

    $values = getSetValues(array(
     'foo' => array(
      'bar' => 123, 
      'rab' => array(
       'oof' => 'abc' 
      ), 
      'oof' => 'cba' 
     ), 
     'oof' => 912 
    ), array('bar', 'oof')); //Search for keys called 'bar' or 'oof' 

    print_r($values); 

?> 

將輸出:

Array 
(
    [0] => 123 (because the key is 'bar') 
    [1] => abc (because the key is 'oof') 
    [2] => cba (because the key is 'oof') 
    [3] => 912 (because the key is 'oof') 
) 

DEMO

1

這取決於你的意思與'訪問'。如果你只是想打印出來的值,你可以使用遞歸函數如下:

function crawlArray($myArray, $depth=0) { 
    foreach ($myArray as $k => $v) { 
    if (is_array($v)) { 
     crawlArray($v, ++$depth); 
    } else { 
     echo $v; 
    } 
    } 
} 

crawlArray($options);