【发布时间】:2014-10-24 18:14:49
【问题描述】:
我有一个关联数组,其键的编号类似于软件版本号,例如32.1,我想做的是采用32.1 之后的每个版本(32.2、32.3、32.4 等)和将它们分配给 32 键下的另一个数组,因此我需要脚本是递归的,以便具有多个版本的较长版本号最终出现在正确的数组键中。
我的代码...
<?php
$array = array(
'1' => 'Level 1',
'1-1' => 'Level 1',
'1-2' => 'Level 1',
'1-2-1' => 'Sub-Level 1',
'2' => 'Level 2',
'3' => 'Level 3'
);
foreach ($array as $key => $value) {
static $assoc = array();
if (preg_match('/-/', $key)) {
$points = explode('-', $key);
$assoc_key = basename($key, '-' . end($points));
$assoc[$assoc_key]['sub'][$key] = array('1' => 'Sub-' . $array[end($points)]);
} else {
$assoc[$key] = array('1' => $array[$key]);
}
}
echo '<pre>' . print_r($assoc, true) . '</pre>';
?>
预期输出:
Array
(
[1] => Array
(
[1] => Level 1
[sub] => Array
(
[1-1] => Array
(
[1] => Sub-Level 1
)
[1-2] => Array
(
[1] => Sub-Level 2
[sub] => Array
(
[1-2-1] => Array
(
[1] => Sub-Sub-Level 1
)
)
)
)
)
[2] => Array
(
[1] => Level 2
)
[3] => Array
(
[1] => Level 3
)
)
实际输出
Array
(
[1] => Array
(
[1] => Level 1
[sub] => Array
(
[1-1] => Array
(
[1] => Sub-Level 1
)
[1-2] => Array
(
[1] => Sub-Level 2
)
)
)
[1-2] => Array
(
[sub] => Array
(
[1-2-1] => Array
(
[1] => Sub-Level 1
)
)
)
[2] => Array
(
[1] => Level 2
)
[3] => Array
(
[1] => Level 3
)
)
谁能帮忙?
我只知道我缺少一些简单的东西,但我已经尝试了两天了。
【问题讨论】:
-
可能是dup of this?
-
你确定你的输入数组是正确的吗? 1-1 和 1-2 不应该是 Sub-Level 1 和 1-2-1 Sub-Sub Level 1?
-
halfer:不,不是。这个问题能够将一个数组中具有相似键的项目添加到单个键下的另一个数组中,以“分组”它们。
-
mTorres:这部分不是很重要,但是,每个“子”项中的“级别”编号应该再次从“1”开始。
标签: php arrays recursion associative-array