这个让我难过。我搜索并发现了类似的问题,但我似乎无法找到任何符合我确切问题的问题。
在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;
?>
请记住,我不知道原始数组中有多少项,我需要一种方法来递归创建一个多维关联数组。
这似乎是一件容易的事,但我似乎无法弄清楚这一点。
答案 0 :(得分:5)
您可以使用引用轻松完成此操作:
$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] =>
)
)
)
)
答案 1 :(得分:1)
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] =>
)
)
)
)
*/
如您所见,该函数可用于在同一变量中创建任意数量的链。