一行代码解决php递归中的“性功能不足”问题
编辑时间:2019-02-27 作者:金满斗 浏览量:1408 来源:原创

前几天整理自己的一份老代码,由于没有时间就把代码git到自己的一个老笔记本上修改。

本来跑得好好的代码在笔记本上提示内存不足,也是,笔记本太老了,内存本身就小。

看下了提示的错误,问题出在一处递归上。这是以前写的递归,无极限生成树形数组经常要用到。

这是以前的代码


 /*无极限分类,返回树形数组结构*/
   Static Public function unlimitedForLayer ($cate, $pid = 0, $name = 'son')
   {
       $arr = [];
       foreach ($cate as $v) {
           if ($v['pid'] == $pid) {
               $v[$name] = self::unlimitedForLayer($cate,  $v['id'],$name);
               if(count($v[$name])==0){
                $v[$name] =null;
               }
               $arr[] = $v;            
           }
       }
       return $arr;
   }
在内里面无极限生成树形类的。天下代码一大抄,当时也不记得是在哪里抄的,好像还是那个培训机构出的代码,后面的
if(count($v[$name])==0){
                $v[$name] =null;
               }
是我后来加的。 研究了一下,只要找到了就删除这个数组,加了个删除键。 最终代码如下
/*无极限分类,返回树形数组结构
   *@param  array $cate  数据库查出来的分类数组
   *@param  int $pid  父分类id
   *@param  string $name  子数组键名
   */
   Static Public function unlimitedForLayer ($cate, $pid = 0, $name = 'son')
   {
       $arr = [];
       foreach ($cate as  $k=>$v) {
           if ($v['pid'] == $pid) {
                unset($cate[$k]);
               $v[$name] = self::unlimitedForLayer($cate,  $v['id'],$name);
               if(count($v[$name])==0){
                $v[$name] =null;
               }
               $arr[] = $v;            
           }
       }
       return $arr;
   }

跑了试验一下,再也不提示内存不足了,一句话解决php性功能不足问题。
所以有时候有人说xx语言不行,慢。不是语言不行,是用的人不行。

来说两句吧