遍历多维数组

3

我有一个类似于这样的JSON文件:

{
"Pages":{
        "/":{
            "Name": "Home",
            "Page": "index.php"
        },

        "/_admin":{
            "Name": "Admin",
            "Page": "_admin/index.php",

            "Template": "admin",
            "MobileTemplate": "admin-mobile",

            "Pages":{

                "/settings":{
                    "Name": "Settings",
                    "Page": "_admin/settings/index.php",
                    "Config": "_admin/settings/config.php",

                    "Pages":{

                        "/user":{
                            "Name": "Users",
                            "Page": "_admin/settings/user.php",
                            "Config": "_admin/settings/config.php",
                            "CatchAll": true
                        }

                    }

                }
            }
        },

        "/tasdf":{
            "Name": "fs",
            "Page": "index.php"
        }
    }
}

我正在尝试循环遍历这个数组(我已经使用JSON解码将其转换为PHP),并且对于每个“Pages”块,我想添加额外的数据。

例如,工作应该像这样:

Array Loop Starts
Finds "Pages"
    -Goes through "/"
    -No "Pages" - continue
   - Goees through "/_admin"
       -Finds "Pages"
       -Goes through "/settings"
           -Finds "Pages"
           -Goes Through "/user"
           -No Pages Continue
   - Goes through "/tasdf"
   - No "Pages" - continue
 End Loop

每次它经过一个部分,我希望它与另一个数组合并。 我正在努力编写代码,以便在找到关键字“Pages”时保持循环。我已经尝试了很多次,但一直在放弃我的代码。 任何帮助都将是极好的!

你想给我们布置任务吗? - open source guy
这是一个个人项目,我只是无法让这个多维数组循环正常工作。 - MichaelH
1个回答

5
您正在寻找一种递归函数,可以扫描您的数组到深度n。类似以下代码可以实现此功能:
function findPagesInArray($myArray) {
    foreach($myArray as $index => $element) {
        // If this is an array, search deeper
        if(gettype($element) == 'array') {
            findPagesInArray($element);
        }

        // Reached the Pages..
        if($index == 'Pages') {
            // Do your task here
        }
    }
}

现在您可以通过调用findPagesInArray($json_object)来使用它。


1
这样行吗?似乎if条件和elseif条件将同时为真(即,所有$index == 'Pages'的元素都是数组)。也许你需要两个if语句? - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接