微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

迭代PHP数组中的所有项和子项

我有一个巨大的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',
            )
        )
    )
);

我有一个文件夹结构,它将使“Sub sub item 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");

函数为数组的每个级别调用自身.一开始,递归可能有点难以理解,但是将它想象成一个新的干净的平板,每个函数调用只剩下少量的数组(通过参数传递)来遍历每次.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐