所以我得到了这个:
$tree = [
array(
'name' => 'One1',
),
array(
'name' => 'One2',
),
array(
'name' => 'One3',
),
array(
'name' => 'One4',
'children' => [
array(
'name' => 'Two1',
),
array(
'name' => 'Two2',
'children' => [
array(
'name' => 'Three1',
),
],
),
array(
'name' => 'Two3',
),
]
),
array(
'name' => 'One5',
),
];
我正在寻找一种获得此输出(递归)的方法:
- 一1
- 一2
- 一3
- 一4 › 二1
- 一4 › 二2 › 三 1
- 一4 › 二3
- 一5
就我而言,我有这个功能
function getValuesPaths(array $tree, $glue = ' > ') {
$branches = array();
foreach ($tree as &$item) {
$piece = $item['name'];
if (array_key_exists('children', $item)) {
if (count($item['children'])>1) {
$leafs = self::getValuesPaths($item['children']);
foreach ($leafs as $item) {
$branches[] = $piece . $glue . $item;
}
}
} else {
$branches[] = $piece;
}
}
return $branches;
}
这将输出以下路径:
- 一1
- 一2
- 一3
- 一4>二1
- 一4>二3
- 一5
它不应该找到One4 > Two2 > Three1
?
可能会帮助你...
function getKeyPaths(array $tree, $glue = '.')
{
$paths = array();
foreach ($tree as $key => &$mixed) {
if (is_array($mixed)) {
$results = getKeyPaths($mixed, $glue);
foreach ($results as $k => &$v) {
$paths[$key . $glue . $k] = $v;
}
unset($results);
} else {
$paths[$key] = $mixed;
}
}
return $paths;
}