首页 > 解决方案 > 从多维数组中提取路径

问题描述

我解析了一段代码,结果(AST)的一部分是这样的数组:

Array ( 
[0] => PhpParser\Node\Stmt\Class_ Object
    (
        [flags] => 0 
        [implements] => Array
            (
            )
        [name] => Test
        [stmts] => Array
            (
                [0] => PhpParser\Node\Stmt\ClassMethod Object
                    ( ...

现在我想提取上述数组的每个路径。我使用以下解决方案:

function backKeyPaths($tree){
$paths = array();
foreach ($tree as $key => &$mixed) {
    if (is_array($mixed)) {
        $results = backKeyPaths($mixed);
            foreach ($results as $k => &$v) {
                $paths[] = array($key => $v);
            }
        unset($results);
    } 
    elseif (is_object($mixed)) {
        $results = backKeyPaths($mixed);
            foreach ($results as $k => &$v) {
                $paths[] = array($key => (object) $v);
            }
        unset($results);
    }
    else {
        $paths[] = array($key => $mixed);
    }
}

return $paths;}

实际上期望的输出应该是这样的:

[0] => PhpParser\Node\Stmt\Class_ Object
(
    [flags] => 0
)
[1] => PhpParser\Node\Stmt\Class_ Object
(
    [implements] => Array
            (
            )
)
[2] => PhpParser\Node\Stmt\Class_ Object
(
    [name] => Test
)
[3] => PhpParser\Node\Stmt\Class_ Object
(
    [stmts] => Array
            (
                [0] => PhpParser\Node\Stmt\ClassMethod Object
                    ( ...
) ...

但是我的解决方案没有返回正确的对象类并将它们全部视为 StdClass 对象。有没有办法通过维护值的类型将对象转换为正确的对象或提取路径?

标签: phpmultidimensional-array

解决方案


推荐阅读