在PHP5.4 5.3等情况下均测试过,之前的时候可以使用,最近重新查看代码时遇到问题
原tree的代码如下
<code>function array2tree($arr, $pid=0, $field=array('parent', 'location', 'children', 'name')){ $tree = array(); foreach($arr as $k => $v){//出错地方在这一行 if($pid == $v[$field[0]]){ $v['roleName'] = $v[$field[3]]; $v['roleId'] = $v['id']; $v['collapsed'] = TRUE; $child = array2tree($arr, $v[$field[1]], $field); empty($child)? $v[$field[2]]=array() : $v[$field[2]] = $child ; $tree[] = $v; unset($arr[$k]); } } return $tree; } </code>
不知道是什么原因,之前在其他程序中使用的比较好
传递进来的$arr 大约长度为3000条,直接使用var_dump()输出是 毫秒级本地响应
报错代码
<code><b>Fatal error</b>: Allowed memory size of 1241513984 bytes exhausted (tried to allocate 36 bytes) in <b>E:\webrework2\wgh_rework\wwwroot\Server\Application\System\Controller\CommonController.class.php</b> on line <b>132</b><br> </code>
虽然报的是内存不够的错误,但是当内存更改到5G以上后仍然报错
当前memory_limit=5280M
以下为测试数据 就是国民经济行业产业代码
http://blog.hainuo.info/testdata.php
点击链接可以获取到json数据,需要将json 转换成数组后才能够使用
在PHP5.4 5.3等情况下均测试过,之前的时候可以使用,最近重新查看代码时遇到问题
原tree的代码如下
<code>function array2tree($arr, $pid=0, $field=array('parent', 'location', 'children', 'name')){ $tree = array(); foreach($arr as $k => $v){//出错地方在这一行 if($pid == $v[$field[0]]){ $v['roleName'] = $v[$field[3]]; $v['roleId'] = $v['id']; $v['collapsed'] = TRUE; $child = array2tree($arr, $v[$field[1]], $field); empty($child)? $v[$field[2]]=array() : $v[$field[2]] = $child ; $tree[] = $v; unset($arr[$k]); } } return $tree; } </code>
不知道是什么原因,之前在其他程序中使用的比较好
传递进来的$arr 大约长度为3000条,直接使用var_dump()输出是 毫秒级本地响应
报错代码
<code><b>Fatal error</b>: Allowed memory size of 1241513984 bytes exhausted (tried to allocate 36 bytes) in <b>E:\webrework2\wgh_rework\wwwroot\Server\Application\System\Controller\CommonController.class.php</b> on line <b>132</b><br> </code>
虽然报的是内存不够的错误,但是当内存更改到5G以上后仍然报错
当前memory_limit=5280M
以下为测试数据 就是国民经济行业产业代码
http://blog.hainuo.info/testdata.php
点击链接可以获取到json数据,需要将json 转换成数组后才能够使用
parent
都是 NULL,你可以测试一下 NULL == 0
这个代码,你就能知道原因了。关于非严格相等情况下的类型转换我就不多表了,网上搜索能找到很多。$pid === $v[ $field[0] ]
,并且初传参数设置成 $pid = "0"
即可。