Извлечение путей из многомерного массива - PullRequest
0 голосов
/ 08 января 2019

Я проанализировал код, и часть результата (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. Есть ли способ привести объекты в правильный или извлечь пути, сохранив тип значений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...