获取多维数组中的值路径

时间:2018-01-30 11:23:40

标签: php

[PHP] - 我想在我的多维数组中抽取我的值的路径。

这是我的数组JSON:

[{"id":8,"uniqe_id":"tmr955q0","nome":"Vini e Bollicine","parent_id":null,"tipo":"submenu","link":null,"created_at":"2018-01-28 18:33:42","updated_at":"2018-01-28 18:36:45","children":{"9":{"id":9,"uniqe_id":"icmxpxyt","nome":"Italia","parent_id":8,"tipo":"submenu","link":null,"created_at":"2018-01-28 18:58:06","updated_at":"2018-01-28 19:20:45","children":{"10":{"id":10,"uniqe_id":"hpgmsm71","nome":"Cantina Sant'Andrea","parent_id":9,"tipo":"link","link":"https:\/\/www.google.it\/","created_at":"2018-01-28 19:21:40","updated_at":"2018-01-28 19:21:40","children":[]}}}}},{"id":11,"uniqe_id":"8c81t2jr","nome":"Birre Classic","parent_id":null,"tipo":"submenu","link":null,"created_at":"2018-01-28 18:33:42","updated_at":"2018-01-29 11:48:09","children":{"12":{"id":12,"uniqe_id":"1ma148y4","nome":"Germania","parent_id":11,"tipo":"submenu","link":"https:\/\/www.google.it\/","created_at":"2018-01-28 18:58:06","updated_at":"2018-01-29 15:40:51","children":{"13":{"id":13,"uniqe_id":"vai1fmki","nome":"Radeberger","parent_id":12,"tipo":"link","link":"https:\/\/www.google.it\/","created_at":"2018-01-28 19:21:40","updated_at":"2018-01-29 13:02:23","children":[]},"14":{"id":14,"uniqe_id":"ffynhlzb","nome":"Warsteiner","parent_id":12,"tipo":"link","link":"https:\/\/alaindifabio.com\/","created_at":"2018-01-28 21:41:38","updated_at":"2018-01-29 13:02:28","children":[]}}},"15":{"id":15,"uniqe_id":"r03gx6rs","nome":"Italia","parent_id":11,"tipo":"submenu","link":null,"created_at":"2018-01-28 21:42:26","updated_at":"2018-01-28 21:42:26","children":{"16":{"id":16,"uniqe_id":"8v3pgirb","nome":"Baladin","parent_id":15,"tipo":"link","link":"https:\/\/alaindifabio.com\/","created_at":"2018-01-28 21:43:37","updated_at":"2018-01-28 21:43:37","children":[]}}},"17":{"id":17,"uniqe_id":"3qb5sr5p","nome":"About","parent_id":11,"tipo":"link","link":"https:\/\/www.google.it\/","created_at":"2018-01-29 15:24:37","updated_at":"2018-01-29 15:24:37","children":[]}}}]

例如我想用uniqe_id获取值数组中的路径:8v3pgirb for path使用所有父项的嵌套数组

2 个答案:

答案 0 :(得分:0)

试试这个。

<?php

$data_string = '[{"id":8,"n...';

$array = json_decode($data_string, true);

function findPath($target_key, $target_value, $array, $path = [])
{
    foreach ($array as $key => $value) {
        if ($value == $target_value && $key == $target_key) {
            $path[] = $key;
            return $path;
        }

        if (is_array($value)) {
            $path[] = $key;
            if (false !== $result = findPath($target_key, $target_value, $value, $path)) {
                return $result;
            }
        }
    }

    return false;
}

print_r(findPath('id', '10', $array));

输出:

Array
(
    [0] => 0
    [1] => children
    [2] => 9
    [3] => children
    [4] => 10
    [5] => id
)

答案 1 :(得分:0)

我用这个功能解决了:

    public static function findPathOnNestedArray(array $array, $string, array &$result) {
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $success = static::findPathOnNestedArray($value, $string, $result);
            if ($success) {
                if(isset($value['nome'])){
                  if($value['nome'] !== null){
                    array_unshift($result, $value['nome']);
                  }
                }
                return true;
            }
        } else {
            if (strcmp($string, $value) == 0) {
                array_unshift($result, $key);
                return true;
            }
        }
    }
    return false;
}