& 引用传递,循环数组问题

  • 慢点
  • 2018-11-23 11:05:28
  • 204已阅读
unset($value) 不生效
/**
* 获取子分类数据
* @param $list
* @param array $top 需要获取子集的id
* @return array
*/
public static function
childTree($list, $top)
{
   static $child = [];
   foreach ($list as $k => &$l) {
       foreach ($top as $t) {
           if ($t == $l['pid']) {
               $pid = $child[] = $l['id'];
               //unset($l);//无效
               unset($list[$k]);
               if (!empty($list)) {
                   self::childTree($list, [$pid]);
               }
               break;
           }
       }
   }
   return $child;
}

unset($l)//去除循环变量不生效,导致后面内存溢出


不使用递归 写法


function childTree($list,$top)
{
   foreach ($list as $k=>&$l) {
       foreach ($top as $t) {
           if ($t == $l['pid']) {
               $top[] = $l['id'];
               unset($list[$k]);
               break;
           }
       }
   }
   return $top;
}