douyin2962 2018-10-01 04:37
浏览 148
已采纳

如何在JSON中找到我解码为PHP的特定键? 我想要找到的关键是在多层嵌套上重复

I want to target "KeyIwanttotarget" which is present on outside as well as nested.

The original file is JSON which I decoded into php using json_decode(). I want to target the specific key on all levels(external as well as nested) and store the value into another array e.g. using foreach and array_push.

"sample": [
    {
        "KeyIwanttotarget": "link",
        "abc": "123",
        "xyz": "123",
        "pqr": "123",
        "sample": [
            {
                "KeyIwanttotarget": "group",
                "abc": "123",
                "xyz": "123"
            },
            {
                "KeyIwanttotarget": "link",
                "abc": "123",
                "xyz": "123",
                "pqr": "123",
                "sample": [
                    {
                        "KeyIwanttotarget": "link",
                        "abc": "123",
                        "xyz": "123",
                        "pqr": "123", 
                    }
                ]
            }
        ]
    }
];
  • 写回答

1条回答 默认 最新

  • dongxie8906 2018-10-01 06:02
    关注

    You need to be able to recursively check all of your key values. The best way to do that is with the array_walk_recursive() function.

    This function allows you to use a callback function which will allow you to create some logic to compare your search string with the key names in the array to be searched.

    The array_walk_recursive() passes two arguments through your callback function. The key and the key's value.

    You will pass those arguments in through the function. You will compare the key name against your search string and if it matches you will add the key's value to the results array.

    Like so:

    $results = array();
    
    $searchString = 'KeyIwanttotarget';
    
    array_walk_recursive($array, function($value, $key) use (&$results, $searchString) {
    
        if($key == $searchString){
    
            $results[] = $value;
            return $results;
        }
    
    });
    
    print_r($results);
    

    Hope it helps!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?