Скажем, у нас есть массив: array(1,2,3,4,...)
И я хочу преобразовать его в:
array( 1=>array( 2=>array( 3=>array( 4=>array() ) ) ) )
Может ли кто-нибудь помочь?
благодаря
EDIT Было бы хорошо иметь решение с итерациями.
$x = count($array) - 1; $temp = array(); for($i = $x; $i >= 0; $i--) { $temp = array($array[$i] => $temp); }
Ну, попробуйте что-то вроде этого:
$in = array(1,2,3,4); // Array with incoming params $res = array(); // Array where we will write result $t = &$res; // Link to first level foreach ($in as $k) { // Walk through source array if (empty($t[$k])) { // Check if current level has required key $t[$k] = array(); // If does not, create empty array there $t = &$t[$k]; // And link to it now. So each time it is link to deepest level. } } unset($t); // Drop link to last (most deep) level var_dump($res); die();
с$in = array(1,2,3,4); // Array with incoming params $res = array(); // Array where we will write result $t = &$res; // Link to first level foreach ($in as $k) { // Walk through source array if (empty($t[$k])) { // Check if current level has required key $t[$k] = array(); // If does not, create empty array there $t = &$t[$k]; // And link to it now. So each time it is link to deepest level. } } unset($t); // Drop link to last (most deep) level var_dump($res); die();
Вывод:
array(1) { [1]=> array(1) { [2]=> array(1) { [3]=> array(1) { [4]=> array(0) { } } } } }
Вы можете просто сделать рекурсивную функцию:
<?php function nestArray($myArray) { if (empty($myArray)) { return array(); } $firstValue = array_shift($myArray); return array($firstValue => nestArray($myArray)); } ?>
Я думаю, что синтаксис для многомерного массива, который вы хотите создать, будет выглядеть следующим образом.
$array = array( 'array1' => array('value' => 'another_value'), 'array2' => array('something', 'something else'), 'array3' => array('value', 'value') );
Это то, что вы ищете?