Recursively cycle every path of an array

后端 未结 6 1797
[愿得一人]
[愿得一人] 2021-01-01 01:02

I have the following(json) object:

$obj = json_decode(\'{
    \"Group1\": {
        \"Blue\": {
            \"Round\": [
                \"Harold\",
                 


        
6条回答
  •  青春惊慌失措
    2021-01-01 01:31

    Here's my take with a generator function:

    function paths(array $a)
    {
        // if first item is an array, recurse
        if (is_array(reset($a))) {
            foreach ($a as $k => $v) {
                foreach (paths($v) as $path) {
                    // yield "key - subpath"
                    yield sprintf('%s - %s', $k, $path);
                }
            }
        } else {
            // yield leaf
            yield sprintf('(%s)', implode(', ', $a));
        }
    }
    
    foreach (paths($obj) as $path) {
        printf("%s\n", $path);
    }
    

    Try it online.

提交回复
热议问题