发个限制递归遍历次数的问题给大家解困,首先声明,我想到的方法不好,觉得递归学的好的可以试试

总哈哈 2016-04-25 04:17:25
有这么一个数组

Array
(
[0] => Array
(
[id] => 49
[name] => 体育部
[parent_id] => 46
[children] => Array
(
[0] => Array
(
[id] => 52
[name] => 体育1专业
[parent_id] => 49
[children] => Array
(
[0] => Array
(
[id] => 57
[name] => 1班
[parent_id] => 52
)

[1] => Array
(
[id] => 58
[name] => 2班
[parent_id] => 52
)

[2] => Array
(
[id] => 59
[name] => 外留学班
[parent_id] => 52
)

)

)

[1] => Array
(
[id] => 53
[name] => 体育2专业
[parent_id] => 49
[children] => Array
(
[0] => Array
(
[id] => 60
[name] => 1班
[parent_id] => 53
)

[1] => Array
(
[id] => 61
[name] => 2班
[parent_id] => 53
)

[2] => Array
(
[id] => 62
[name] => 3班
[parent_id] => 53
)

[3] => Array
(
[id] => 63
[name] => 4班
[parent_id] => 53
)

[4] => Array
(
[id] => 64
[name] => 5班
[parent_id] => 53
)

)

)

)

)

)


具体的数组是这样的

因为这个层数是不固定的,下面可能还有children,我想设置一个数,限制它的遍历层数,例如限制遍历一层,结果如下:
可以理解成一个 children 是一层,请各位高手出手

Array
(
[0] => Array
(
[id] => 49
[name] => 体育部
[parent_id] => 46
[children] => Array
(
[0] => Array
(
[id] => 52
[name] => 体育1专业
[parent_id] => 49
)

[1] => Array
(
[id] => 53
[name] => 体育2专业
[parent_id] => 49
)

)

)

)
...全文
184 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
总哈哈 2016-04-25
  • 打赏
  • 举报
回复
解决得很完美,非常感谢。
xuzuning 2016-04-25
  • 打赏
  • 举报
回复
可以优化一下
function foo($ar, $deep=-1) {
  if($deep < 0) return $ar;
  $res = array();
  foreach($ar as $k=>$r) {
    if(isset($r['children'])) {
      if($deep) $r['children'] = foo($r['children'], $deep-1);
      else unset($r['children']);
    }
    $res[$k] = $r;
  }
  return $res;
}

xuzuning 2016-04-25
  • 打赏
  • 举报
回复
$ar = array (
  0 => 
  array (
    'id' => '49',
    'name' => '体育部',
    'parent_id' => '46',
    'children' => 
    array (
      0 => 
      array (
        'id' => '52',
        'name' => '体育1专业',
        'parent_id' => '49',
        'children' => 
        array (
          0 => 
          array (
            'id' => '57',
            'name' => '1班',
            'parent_id' => '52',
          ),
          1 => 
          array (
            'id' => '58',
            'name' => '2班',
            'parent_id' => '52',
          ),
          2 => 
          array (
            'id' => '59',
            'name' => '外留学班',
            'parent_id' => '52',
          ),
        ),
      ),
      1 => 
      array (
        'id' => '53',
        'name' => '体育2专业',
        'parent_id' => '49',
        'children' => 
        array (
          0 => 
          array (
            'id' => '60',
            'name' => '1班',
            'parent_id' => '53',
          ),
          1 => 
          array (
            'id' => '61',
            'name' => '2班',
            'parent_id' => '53',
          ),
          2 => 
          array (
            'id' => '62',
            'name' => '3班',
            'parent_id' => '53',
          ),
          3 => 
          array (
            'id' => '63',
            'name' => '4班',
            'parent_id' => '53',
          ),
          4 => 
          array (
            'id' => '64',
            'name' => '5班',
            'parent_id' => '53',
          ),
        ),
      ),
    ),
  ),
);

function foo($ar, $deep=-1) {
  if($deep < 0) return $ar;
  $res = array();
  foreach($ar as $k=>$r) {
    if(isset($r['children'])) {
      $t = $r['children'];
      unset($r['children']);
      if($deep) $r['children'] = foo($t, $deep-1);
    }
    $res[$k] = $r;
  }
  return $res;
}

print_r(foo($ar, 1));
Array
(
    [0] => Array
        (
            [id] => 49
            [name] => 体育部
            [parent_id] => 46
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 52
                            [name] => 体育1专业
                            [parent_id] => 49
                        )

                    [1] => Array
                        (
                            [id] => 53
                            [name] => 体育2专业
                            [parent_id] => 49
                        )

                )

        )

)

霍允 2016-04-25
  • 打赏
  • 举报
回复
递归的伪代码:

function getTortoise($arr, $flag){
    if($flag===0) return;
    foreach ($arr as $k => $v) {
        //do something...
        getTortoise($arr,$flag--);
    }
}

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧