列出多维数组的所有路径


List all paths of a multi-dimensional array

所以我得到了这个:

$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;
}