Intereting Posts

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

У меня есть я в тупике. Я искал и нашел похожие вопросы, но я не могу найти никаких вопросов, которые бы соответствовали моей точной проблеме.

В PHP у меня есть такой массив:

<?php $array = array('one', 'two', 'three', 'four'); ?> 

Я хочу преобразовать это в многомерный массив следующим образом:

 <?php $new_array = array('one' => array('two' => array('three' => array('four' => NULL)))); // or, to put another way: $new_array['one']['two']['three']['four'] = NULL; ?> 

Принимая во внимание, что я не знаю, сколько элементов будет в исходном массиве, мне нужен способ рекурсивного создания многомерного связанного массива.

Казалось, что это легко сделать, но я не могу понять это.

Related of "Преобразование одномерного массива в многомерный связанный массив"

Вы можете сделать это легко со ссылками:

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

Печать $out должна дать вам:

 Array ( [one] => Array ( [two] => Array ( [three] => Array ( [four] => ) ) ) ) 
 function recursive_array_convert ($input, &$result = array()) { $thisLevel = array_shift($input); if (count($input)) { if (!isset($result[$thisLevel]) || !is_array($result[$thisLevel])) { $result[$thisLevel] = array(); } recursive_array_convert($input, $result[$thisLevel]); } else { $result[$thisLevel] = NULL; } return $result; } 

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

 $result = recursive_array_convert(array('one', 'two', 'three', 'four')); 

…или…

 recursive_array_convert(array('one', 'two', 'three', 'four'), $result); 

На первый взгляд может показаться малозначимым в этом варианте, но рассмотрим следующее:

 $result = array(); recursive_array_convert(array('one', 'two', 'three', 'four'), $result); recursive_array_convert(array('five', 'six', 'seven', 'eight'), $result); print_r($result); /* Output: Array ( [one] => Array ( [two] => Array ( [three] => Array ( [four] => ) ) ) [five] => Array ( [six] => Array ( [seven] => Array ( [eight] => ) ) ) ) */ 

Как вы можете видеть, эту функцию можно использовать для создания целых цепей, как вам нравится в одной и той же переменной.