2011-10-21 73 views
1

我試圖循環一個數組,每次都向另一個數組添加一個新的級別。讓我說明 - 每次PHP每個循環都有一個更深的陣列

$arr = array("1","5","6"); 

循環

$index[$arr[0]]; 

循環

$index["1"][$arr[1]] // "1" since this key was filled in by the previous loop, continuing with a new key 

循環

$index["1"]["5"][$arr[2]] // same as previous loop 

--looped在所有$改編的變量$改編的價值觀是不同的項目,完成,結果是$ index [「1」] [「」 5「] [」6「] -

問題是我不知道$arr數組包含多少值。然後,我不知道如何繼續,例如,$index["1"]當第一個值$arr已被循環到下一個數組級別(換言之:添加另一個鍵)。

任何人?

+0

用戶正在詢問如何基於現有數組的值構建多維數組。對於給定的數組[1,5,6],他想構建一個如下所示的數組:$ array [1] [5] [6] –

+0

嗯,我不確定最終函數的外觀如何,但這會很容易有一個遞歸函數。 – OptimusCrime

+0

正好,謝謝@ChrisSobolewski – carlo

回答

6

您可以使用引用:

$a = array("1","5","6"); 
$b = array(); 
$c =& $b; 

foreach ($a as $k) { 
    $c[$k] = array(); 
    $c  =& $c[$k]; 
} 

輸出

Array 
    (
    [1] => Array 
     (
      [5] => Array 
       (
        [6] => Array 
         (
         ) 
       ) 
     ) 
) 

用一些ot覆蓋最後一個元素她的價值,你可以添加一行:

$c = 'blubber'; 

循環後,因爲$ C是最深的陣列級別的參考,當循環結束。

+0

完美的解決方案,謝謝! – carlo

3
function add_inner_array(&$array, $index) { 
    if(isset($array[$index])) return true; 
    else { 
     $array[$index] = array(); 
     return true; 
    } 
} 

$a = array(1,5,6); 
$index = array(); 
$pass =& $index; 
foreach($a as $k) { 
    add_inner_array($pass, $k); 
    $pass =& $pass[$k]; 
} 
+0

謝謝你,這是訣竅。現在,最後,我怎樣才能爲最後一個鍵(而不是空數組)分配一個值? – carlo