2015-10-20 87 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