2011-10-21 5 views
1

私は1つの配列をループし、毎回別の配列に新しいレベルを追加しようとしています。私が説明しましょう - 変数$ ARRの値が毎回異なるPHP各レベルの配列が深い配列

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

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

をループ

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

をループ

$index[$arr[0]]; 

をループすべての$のARRの上--looped items、done、resultは$ index ["1"] [" 5 "] [" 6 "] -

問題は、$arr配列にどのくらいの値が含まれているかわかりません。次に$arrの最初の値が次の配列レベルにループされたとき(たとえば、別のキーを追加したとき)、$index["1"]から続ける方法はわかりません。

誰でも?

+0

ユーザーは、既存の配列の値に基づいて多次元配列を作成する方法を尋ねています。配列[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のは、最も深いアレイレベルへの参照であるので、ループの後

$c = 'blubber'; 

:彼女の価値は、あなただけの行を追加することができます。

+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