2015-10-20 81 views
-4

我的問題是:像數字陣列陣列創建金字塔

我要找TOR的算法,這使得$array1樣子$pyramid

我有這樣的數組:

$array1 = [ 
    'foo', 
    'baz', 
    'bar', 
    'apple' 
]; 

我想從$array1創建一個新的數組($pyramid),它看起來是這樣的:

$pyramid = [ 
    'foo' => [ 
     'baz' => [ 
      'bar' => [ 
       'apple' => ' ' 
      ] 
     ] 
    ] 
]; 

的例子$array1有4個元素,但它可以是任意長的,所以算法應該適用於任何維度。

+2

你至今嘗試過什麼?你爲什麼這麼想? – Manwal

+0

呵呵,這很難解釋。我想將它用於我網站上的配置設置。我創建了一個數組(允許調用現在的模式),其中包含輸入字段的evry細節,如:名稱,值,類型,最小/最大規則佔位符等等。但是,這個領域的evry在這種模式中是空的。我有一個設置另一個數組,但我定義了像這樣的設置:顯示/名稱/東西,規則/分鐘/ 50等。所以我爆炸這些字符串的/,並生成一個數組,如:$ exploded ['display' ,'name','something'],所以我想從中建立金字塔,以便與模式匹配。 – Daniel

回答

3

你的意思是這樣的:

$pyramid = []; 
$pyramidPtr = &$pyramid; 

foreach ($array1 as $element) { 
    $pyramidPtr[$element] = null; 
    $pyramidPtr = &$pyramidPtr[$element]; 
} 
unset($pyramidPtr); 

var_dump($pyramid); 
+1

這將導致尾隨價值..檢查[this](https://eval.in/453790) –

+0

偉大工程:)謝謝 – Daniel

1

您可以沿着使用array_walkarray_reverse等作爲

$reversed = array_reverse($array1); 
$result = []; 
array_walk($reversed,function($v,$k)use(&$result){ 
    $result = $v ? [$v => $result] : ""; 
}); 

print_r($result); 

Demo

+1

作品像一個魅力,非常感謝! :) – Daniel