2011-11-03 190 views
1

我有一個這樣的數組:PHP:構建多維數組

Array(
    'level1' => 'someval', 
    'level2' => 'someotherval', 
    'level3' => 'thirdval' 
) 

我希望把它變成這樣:

Array(
    'someval' => Array(
    'someotherval' => Array(
     'thirdval' => 1 
    ) 
) 
) 

很顯然,我可以用手工打造上面的例子,但我不不知道會有多少關卡。這個簡單的例子看起來沒有用處,但是會有更多的值,所以每個級別都會有多個數組。

+0

哪裏的值'1'從何而來? –

+0

你的問題有點含糊?你需要在多維數組內存儲什麼?什麼聲明數組需要嵌套到哪個級別等等?這種模式會繼續還是會在某些層次上包含多個值? –

+0

@Tim Cooper對不起,這是一個錯字。 – user774528

回答

2

這將做到這一點

$array = array(
      'level1' => array(
      'level2' => array(
       'level3' => 1 
      ) 
      ) 
     ); 
+5

我猜OP想讓它變成動感... – gustavotkg

+1

對不起,我打錯了部分我的問題。也請看最後一段。我可以按照您演示的方式輕鬆構建數組,但我不知道會有多少級別,所以我需要遞歸循環遍歷它或類似的東西。 – user774528

+0

不確定你在找什麼,但你可能會研究「通過引用」和「遞歸」函數/方法調用。這可能有助於你理解一些。 – jjwdesign

0

您是否需要這樣的事?

$levels = array_keys(Array(
    'level1' => 'someval', 
    'level2' => 'someotherval', 
    'level3' => 'thirdval' 
)); 
$array = Array(); 
$aux = &$array; 
foreach ($levels as $level => $value) { 
    if ($aux == 1) 
     $aux = array($value => 1); 
    $aux = &$aux[$value]; 
} 
var_dump($array); 
+0

從未嘗試過在PHP中使用「&」。看起來不錯。將嘗試它:) – Jeune

0

這是我對此採取:

function make_multi_level_array($arr) { 
     if (count($arr) == 1) return array(array_pop($arr) => 1); 
     else { 
       $level_key = array_pop(array_reverse($arr)); 
       $sub_level = make_multi_level_array(
         array_slice($arr,1,count($arr)-1)  
       ); 
       return array(
         $level_key => $sub_level 
       ); 
     }  

} 
$arr = array(
    'level1' => 'someval', 
    'level2' => 'someotherval', 
    'level3' => 'thirdval', 
); 

var_dump(make_multi_level_array($arr)); 

將輸出這樣的:

array(1) { 
    ["someval"]=> 
    array(1) { 
    ["someotherval"]=> 
    array(1) { 
     ["thirdval"]=> 
     int(1) 
    } 
    } 
} 

也試過其他情況下,像下面。

$arr = array(
    'level1' => 'someval', 
    'level2' => 'someotherval', 
    'level3' => 'thirdval', 
    'level4' => 'fourthval' 
); 

看起來沒問題:

array(1) { 
    ["someval"]=> 
    array(1) { 
    ["someotherval"]=> 
    array(1) { 
     ["thirdval"]=> 
     array(1) { 
     ["fourthval"]=> 
     int(1) 
     } 
    } 
    } 
}