前几天整理自己的一份老代码,由于没有时间就把代码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语言不行,慢。不是语言不行,是用的人不行。