PHP Преобразование одномерного массива в вложенный массив

Как преобразовать одномерный массив элементов «N» в «N» уровень вложенного массива в PHP?

Пример:

Входные данные :

$input = array('Orange','Apple','Banana'); 

Ожидаемый результат:

 $output = array( 'name' => 'Banana', 'sub_category' => array( 'name' => 'Apple', 'sub_category' => array( 'name' => 'Orange' ); 

Это мой код:

  $categories = array('Orange','Apple','Banana'); $count = count($categories); for($i=0;$i<=$count;$i++){ if(isset($categories[$i+1])){ $parent = $categories[$i+1]; // parent $categories[$i+1]=array( 'name' => $categories[$i+1], 'sub_category' => array('name' => $categories[$i]) ); } } $categories = $categories[$count-1]; var_dump($categories); 

Мой код неаккуратный, и я также получаю следующий неверный вывод:

 $output = array( 'name' => 'Banana', 'sub_category' => array( 'name' => array( 'name' => 'Apple', 'sub_category' => array( 'name' => 'Orange' ); ); 

Изменить 1:

Проблема / решение, представленное здесь , похоже, не отвечает на мой вопрос.

Вы можете использовать простой метод рекурсии:

 function toNestedArray(array $input, array $result = []) { $result = ['name' => array_pop($input)]; if (count($input)) { $result['sub_category'] = toNestedArray($input, $result); } return $result; } 
 $categories = array('Orange','Apple','Banana'); $count = count($categories); $categories2=array(); for($i=$count-1;$i>0;$i--){ if($i-2>-1){ $categories2=array( 'name'=>$categories[$i], 'sub_category'=>array('name'=>$categories[$i-1],'sub_categories'=>array('name'=>$categories[$i-2])) ); } } echo "<pre>"; print_r($categories2); echo "</pre>"; 

Простой вариант состоит в том, чтобы перебрать массив $input , построив массив $output изнутри наружу.

 $output = array(); foreach ($input as $name) { if (empty($output)) { $output = array("name" => $name); } else { $output = array("name" => $name, "sub_category" => $output); } }