php - 遍历 PHP 数组中的所有项目和子项目

标签 php arrays

我有一个巨大的 PHP 数组,其中包含网站的导航结构。它基本上看起来像这样:

$navMap = array(
    array(
        'title' => 'Home',
    ), array(
        'title' => 'about us',
        'subNav' => array(
            array(
                'title' => 'Sub item 1',
                'subNav' => array(
                    array(
                        'title' => 'Sub sub item 1',
                    ),  array (
                        'title' => 'Sub sub item 2',
                    )
                ),
            ), array (
                'title' => 'Sub item 2',
            ), array (
                'title' => 'Sub item 3',
            )
        )
    )
);

我有一个文件夹结构,可以使“子子项目 2”页面链接 /pages/1/0/1.php 因为它位于主要导航项目的第二个,二级导航项的第一个和三级导航项的第二个。

我没有将链接写入容易出现人为错误的数组,而是使用 PHP 为我添加链接。这就是我现在正在做的事情:

for ($a = 0; $a < count($navMap); $a++) {
    $navMap[$a]['link'] = '/pages/'.$a.'.php';

    if (isset($navMap[$a]['subNav'])){

        for ($b = 0; $b < count($navMap[$a]['subNav']); $b++) {
            $navMap[$a]['subNav'][$b]['link'] = '/pages/'.$a.'/'.$b.'.php';

            if (isset($navMap[$a]['subNav'][$b]['subNav'])){

                for ($c = 0; $c < count($navMap[$a]['subNav'][$b]['subNav']); $c++) {
                    $navMap[$a]['subNav'][$b]['subNav'][$c]['link'] = '/pages/'.$a.'/'.$b.'/'.$c.'.php';
                }
            }

        }
    }
}

虽然这是一个非常丑陋的解决方案。有谁知道将链接添加到数组的更好方法吗?

我正在寻找一种解决方案,该解决方案可以自行检测无限数量的级别,而无需为添加的每个额外级别添加额外的代码。每次将新级别添加到 $navMap 时,我当前的解决方案都必须进行编辑。

最佳答案

您可能需要递归解决方案,而不是迭代解决方案。

function build_navMap(&$navMap,$link) {
    foreach ($navMap as $l => &$nm) {
        $nm['link'] = "$link/$l.php";
        if (isset ($nm['subNav'])) {
            build_navMap($nm['subNav'],"$link/$l");
        }
    }
}
build_navMap($navMap,"/pages");

此函数为数组的每一层调用自身。递归一开始可能有点难以理解,但可以将其视为每次函数调用的新白板,每次遍历的数组(通过参数传入)都少一些。

关于php - 遍历 PHP 数组中的所有项目和子项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32411072/

相关文章:

php - 如何将 php 变量插入 javascript 对象/数组

php - 加密/解密文件

javascript - php div 内容包括 html 到变量

php - 如何在使用 composer 省略选择文件的同时需要一个包

php - 数据库从其他数据库表中获取所有存在的内容

javascript - 如何通过每次从所有行中取一个值来获取带有循环的二维数组中值的所有组合?

javascript - 从 D3 中的多个 csv 文件导入数据

php - 如何在 Laravel 中创建嵌套集合?

c - 从文件中打印错误的字符?

c 编程 10 个数字中最大的一个。我的代码有什么问题吗?我没有得到输出