php迭代数组的方法,迭代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");

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值