foreach里面的unset

php菜鸡 2017-05-03 09:20:45
无限级分类 迭代法查看子孙树

function subtree($arr,$parent){
$subs = array();
$task = array($parent);
while(!empty($task)){
$flag = false; //$flag初始化为假
foreach($arr as $k=>$v){
if($v['parent'] == $parent){
$subs[] = $v;
$parent = $v['id'];
array_push($task,$v['id']);
unset($arr[$k]); //为什么此处要用unset??????
$flag = true; //找到子栏目
}
}
if($flag == false){
array_pop($task);
$parent = end($task);
}
print_r($task);
}
return $subs;
}
...全文
356 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
php菜鸡 2017-05-11
  • 打赏
  • 举报
回复
引用 6 楼 fdipzone 的回复:
foreach($arr as $k=>$v) 相当于 $arr[$k] = $v; 要删除 $v 就是删除 $arr[$k] 了; 没有$v[$k] 这个。
$arr[$k] => $v 这样吗
傲雪星枫 2017-05-07
  • 打赏
  • 举报
回复
foreach($arr as $k=>$v) 相当于 $arr[$k] = $v; 要删除 $v 就是删除 $arr[$k] 了; 没有$v[$k] 这个。
傲雪星枫 2017-05-06
  • 打赏
  • 举报
回复
如果不unset,就会重复执行了。
php菜鸡 2017-05-06
  • 打赏
  • 举报
回复
引用 1 楼 jiangchuankyo 的回复:
当 foreach 执行过了 $arr[0] 后就销毁 $arr[0],执行了 $arr[1] 后就销毁 $arr[1] 如果不销毁的话 , while 循环执行到下一次时 后面的 foreach($arr as $k=>$v) 有会把$arr从头执行了
还有个问题,为什么要用$arr[$k],而不是$v[$k]
xuzuning 2017-05-04
  • 打赏
  • 举报
回复
举个例子就清楚了
$ar = array(
  array('id' => 1, 'parent'] =>0),
  array('id' => 2, 'parent'] =>1),
  array('id' => 3, 'parent'] =>1),
);
subtree($ar, 1);
id=1 的节点有 id=2 和 id=3 的两个子节点 当找到 id=2 的节点后,如果不删去的话,下一轮查找就又会找到 id=2 的节点 从而出现死循环,显然这个 unset($arr[$k]); 是不得已而为之的,因为这个算法的思路有问题(他采用的是 深度优先算法,应该还有优化的余地) 而 广度优先算法 就要简单多了
function subtree($arr,$parent){
  $subs = array();
  $task = array($parent);
  for($i=0;$i<count($task); $i++){
    $parent = $task[$i];
    foreach($arr as $k=>$v){
      if($v['parent'] == $parent){
        $subs[] = $v;
        if(! in_array($v['id'], $task)) $task[] = $v['id'];
      }
    }
  }
  return $subs;
}
傲雪星枫 2017-05-04
  • 打赏
  • 举报
回复
执行过的就清除,否则会重复执行。
内容概要:本文研究了基于Q-Learning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制中的应用,旨在提升其在复杂海洋环境下的控制性能。通过建立AUV的动力学模型,将Q-Learning算法与传统PID控制相结合,实现控制器参数的在线自适应优化,有效增强了系统的响应速度、稳定性和抗干扰能力。研究采用Matlab进行仿真验证,结果表明该方法在轨迹跟踪与姿态控制方面具有优越表现,为水下机器人智能控制提供了可行的技术路径与理论支持。; 适合人群:具备自动控制理论、强化学习或水下机器人建模背景,从事相关科研工作的研究人员、高校研究生及工程技术开发者。; 使用场景及目标:①应用于高精度、强鲁棒性的水下机器人运动控制系统设计;②开展智能PID控制器在非线性、时变系统中的参数自整定研究;③作为强化学习在复杂工业控制场景中落地的典型案例参考,推动算法与工程实践融合。; 阅读建议:建议结合提供的Matlab代码进行仿真实验,重点剖析Q-Learning与PID融合的架构设计、奖励函数设定及参数收敛过程,可进一步拓展至与其他智能优化算法(如DQN、Actor-Critic)的对比研究,深化对自适应控制机制的理解。

21,889

社区成员

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

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