1
我使用以下函数将标签列表转换为数组,但深度为1的标签添加到数组[1]中;为什么深度为1的行添加到数组[1]
选项卡列表:
$test = "Test
Sub Item Test 1 (Test)
Sub Item Test 2 (Test)
Sub Sub Item Test 1 (Sub Item Test 2)
Sub Sub Sub Item Test 1 (Sub Item Test 2)
Test 2
Sub Item Test 1 (Test 2)
Test 3
Sub Item Test 1 (Test 3)
Test 4
Sub Item Test 1 (Test 4)
Test 5
Sub Item Test 1 (Test 5)";
功能:
function convert($list, $indent = "\t") {
$main = array();
foreach (explode(PHP_EOL, $list) as $line) {
$depth = substr_count($line, $indent);
$line = trim($line);
if ($line == '') {
continue;
}
$a = &buildArray($main, $depth, 0, $line);
$a[$i++] = $line;
}
return $main;
}
function &buildArray(&$array, $depth, $current = 0, $line = null) {
if ($depth == $current) {
return $array;
} else {
foreach ($array as &$value) {
if (is_array($value)) {
return buildArray($value, $depth, ++ $current);
}
}
$tmp = array();
$array[] = &$tmp;
return buildArray($tmp, $depth, ++ $current);
}
}
这里是运行 “转换($测试)”
Array
(
[0] => Test
[1] => Array
(
[1] => Sub Item Test 1 (Test)
[2] => Sub Item Test 2 (Test)
[3] => Array
(
[0] => Array
(
[3] => Sub Sub Item Test 1 (Sub Item Test 2)
)
[4] => Sub Sub Sub Item Test 1 (Sub Item Test 2)
)
[6] => Sub Item Test 1 (Test 2)
[8] => Sub Item Test 1 (Test 3)
[10] => Sub Item Test 1 (Test 4)
[12] => Sub Item Test 1 (Test 5)
)
[5] => Test 2
[7] => Test 3
[9] => Test 4
[11] => Test 5
)
那么为什么会后的结果数组[1] [6]而不是数组[6],对于数组[5]之后的所有行,依此类推?