Как вернуть каждый путь и его хеш из многомерного массива? - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь вернуть каждый путь многомерного массива вместе с его хеш-значением.Я использовал это решение:

function newMethod($tree) {
$hash = "";
$final = array();
    foreach ($tree as $key => &$mixed) {
        if (is_array($mixed) || is_object($mixed)) {
            $results = newMethod($mixed);
                foreach ($results as $k => &$v) {
                    $hash = md5($key . $v);
                        if(is_array($mixed)) {
                            $final[][$hash] = array($key => $v);
                        }
                        elseif(is_object($mixed)) {
                            $final[][$hash] = array($key => (object)$v);
                        }
                } 
            unset($results);
        } else {
            $hash = md5($key. $mixed);
            $final[][$hash] = array($key => $mixed); 
        }
    }
return $final;
}

Использование этой функции обеспечивает значение хеш-функции для каждого раздела пути отдельно и не связывает их вместе.Как я могу изменить это решение, чтобы получить вывод, подобный следующему:

Array
(
    [0] => Array
    (
        [Hash of first path] => Array
        (
            [a] => b
        )
    )
    [1] => Array
    (
        [Hash of second path] => Array
        (
            [c] => stdClass Object
            (
                [d] => Array
                    (
                        [1] => 11
                    )
            )

        )

    )
)
...

Простое дерево и часть вывода следующие:

$new = [
    'a' => 'b',
    'c' => (object)[
        'd' => [1 => 11, 2 => 12],
        'f' => 'Hello',
    ],
];
//output
[0] => Array
    (
        [187ef4436122d1cc2f40dc2b92f0eba0] => Array
            (
                [a] => b
            )

    )

[1] => Array
    (
        [595448f796fd1d2d5f192949d79ba9df] => Array
            (
                [c] => stdClass Object
                    (
                        [f801394efb8c6ca75f1ab6a639556520] => Array
                            (
                                [d] => Array
                                    (
                                        [698d51a19d8a121ce581499d7b701668] => Array
                                            (
                                                [1] => 11
                                            )

                                    )

                            )

                    )

            )

    )
...
...