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

总哈哈 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
)

)

)

)
...全文
248 4 打赏 收藏 转发到动态 举报
写回复
用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--);
    }
}
资源说明】 基于深度习的光伏发电功率预测系统源码(含前端+后端)+项目说明.zip 本项目主体围绕着“基于深度习算法的短期光伏发电功率预测模型”而构建。旨在设计出一款面向电力公司和光伏发电业主的系统,其具有辅助决策、风险预测的能力,强大的数据提取、统计与分析能力和清晰的数据相关性、影响性的可视化展示功能。 项目背景 随着光伏发电网规模的扩大和应用的普及,对于光伏发电的并网需求持续增大,但是光伏发电所具有的波动性和间歇性的特性势必会对并网系统的稳定性产生一定的影响。诸如太阳辐射强度、空气湿度、气压、环境温度等因素是导致光伏发电的波动性和间歇性产生的首要因素,若对于光伏发电缺少相应的技术手段预测功率和调整模式,势必在并网时会不利于电力系统的调整,并且为电网调度人员产生困扰。 在此背景之下,设计出合理且有效的光伏发电功率预测模型一方面可以提升并网后电力系统运行的安全性和稳定性;另一方面也有利于光伏电站业主或调度人员的协调调度,进一步提升电能资源利用率。 项目目的 通过设计出合理的“基于深度习算法的短期光伏发电功率预测模型”以及对该模型的进一步优化,在大规模分布式光伏发电的电力管理层面,为管理人员提供短期内环境因素的具体数据以及光伏发电功率的预测结果,帮助管理人员进行协调调度,从而提升电能利用率;在个人中小规模分布式光伏电站业主层面,提供短期内光伏发电功率的预测结果并给出调整策略建议,保障中小型分布式光伏电站并网后电网运行的稳定性和供电可靠性,同时对于一种更加互利且合理的个人光伏发电并网后差额电量的补偿和外送机制进行展望。 ## 技术选型(Technics) 项目架构 该项目采用B/S架构,后端调用算法模型,展示在前端。 算法技术 主要语言:Python - Keras - Sci-kit Learn 后端技术 主要语言:Java - Spring

21,890

社区成员

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

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