php создает многомерный массив из плоского

У меня такой массив:

<?php $array = array( 0 => 'foo', 1 => 'bar', ..., x => 'foobar' ); ?> 

Каков самый быстрый способ создания многомерного массива из этого, где каждое значение является другим уровнем? Поэтому я получаю:

 array (size=1) 'foo' => array (size=1) 'bar' => ... array (size=1) 'x' => array (size=1) 0 => string 'foobar' (length=6) 

 <?php $i = count($array)-1; $lasta = array($array[$i]); $i--; while ($i>=0) { $a = array(); $a[$array[$i]] = $lasta; $lasta = $a; $i--; } ?> 

$a – выход.

Попробуй это:

 $out = array(); $cur = &$out; foreach ($array as $value) { $cur[$value] = array(); $cur = &$cur[$value]; } $cur = null; print_r($out); 

Схватил его с другого поста.

Что именно ты пытаешься сделать? Так много массивов размером 1 кажется немного глупым.

вы, вероятно, хотите использовать foreach loop (s) с парой key => value

 foreach ($array as $k=>$v) { print "key: $k value: $v"; } 

Вы могли бы сделать что-то подобное, чтобы получить массив, который вы просили:

 $newArray = array(); for ($i=count($array)-1; $i>=0; $i--) { $newArray = array($newArray[$i]=>$newArray); } 

Я смущен тем, что вы хотите делать с нечисловыми ключами (т. Е. X в вашем примере). Но в любом случае использование ссылок на массивы поможет

 $array = array( 0 => 'foo', 1 => 'bar', x => 'foobar' ); $out = array(); $curr = &$out; foreach ($array as $key => $value) { $curr[$value] = array(); $curr = &$curr[$value]; } print( "In: \n" ); print_r($array); print( "Out : \n" ); print_r($out); 

Печатает

 In: Array ( [0] => foo [1] => bar [x] => foobar ) Out : Array ( [foo] => Array ( [bar] => Array ( [foobar] => Array ( ) ) ) ) 

Вы можете использовать рекурсивную функцию, чтобы не выполнять итерацию через массив на каждом шаге. Вот такая функция, которую я написал.

 function expand_arr($arr) { if (empty($arr)) return array(); return array( array_shift($arr) => expand_arr($arr) ); } 

Ваш вопрос немного неясен, поскольку в вашем первоначальном заявлении вы используете следующее значение в массиве как ключ следующего шага вниз, а затем в конце вашего примера вы используете исходный ключ как единственный ключ в следующем шаге ключ.