> 백엔드 개발 > PHP 튜토리얼 > 在开发中生成tree的时候遇到问题难以解决

在开发中生成tree的时候遇到问题难以解决

WBOY
풀어 주다: 2016-06-06 20:36:36
원래의
1268명이 탐색했습니다.

在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 转换成数组后才能够使用

  1. 首先你的数据不是 JSON 字符串,而是 serialize 序列化字符串。
  2. 然后就是其实是你的数据和 PHP 是弱语言的关系。因为你的数据里面很多 parent 都是 NULL,你可以测试一下 NULL == 0 这个代码,你就能知道原因了。关于非严格相等情况下的类型转换我就不多表了,网上搜索能找到很多。
  3. 解决的办法其实也非常简单,把 if 判断的条件该成 $pid === $v[ $field[0] ],并且初传参数设置成 $pid = "0"即可。
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿