学习php ing
$arr = array(
array(‘id’=>1,’area’=>’北京’,’pid’=>0),
array(‘id’=>4,’area’=>’易县’,’pid’=>3),
array(‘id’=>3,’area’=>’保定’,’pid’=>2),
array(‘id’=>2,’area’=>’河北’,’pid’=>0),
array(‘id’=>5,’area’=>’海淀’,’pid’=>1),
array(‘id’=>6,’area’=>’浙江’,’pid’=>0),
array(‘id’=>7,’area’=>’杭州’,’pid’=>6),
array(‘id’=>8,’area’=>’广东’,’pid’=>0),
array(‘id’=>9,’area’=>’深圳’,’pid’=>8)
);
老师的递归题目,想了3个小时,修修改改终于做到老师要求的效果了,不知道代码是不是最优化了,总感觉没读一行arrar数据,就要foreach一遍,是不是最优化了??
新疆网友:看起来不像最优解
海南网友:显然不是最优解…
内蒙古网友:
看半天没搞懂你的需求是什么?
更新:看懂了,等我拉完屎想想
四川网友:好久没用PHP了, 这语法真是槽点。 就跟GO的语法很**一样。
辽宁网友:三级联动
就是选地区那个
用的无限级pid方法
辽宁网友:不懂绑定
台湾网友:求最优写法
甘肃网友:如果确定只有三级联动,可以用 json 那种数据格式,就是子地区放在父地区的数据内,你这个数据存放方式 是类似常规的数据库 一行一数据 那种,思路是无限级联动的做法。
另外数组中可以直接用 $arr[1] = array(xxx) 而不需要 id 这个键,取的时候也直接 $arr[1] 取出数据,就可以避免你说的 每读一行都要 foreach 一遍所有数据。
在日常开发中,具体需求具体分析,有些时候确实只能用你这个方案,有时可以偷懒省掉很多啰嗦代码,虽然运行效率提高了,但通用性就比较差(比如我说的那样… 可能会被老师打…
新疆网友:分析了下,即便用array_search等函数也只不过把遍历过程写进了函数,实际查找还是需要每次都遍历数组。
解决根本问题需要在首次遍历数组时就把它复制进有索引的新数组,后期只需读新数组取键值即可。
我的方法是:
- <?php
- function run($arr,$id){
- static $pre=array();
- if(!$pre){foreach($arr as $row){$pre[$row[‘pid’]][$row[‘id’]]=$row[‘area’];}}
- $bot=empty($pre[$id])?array():array($pre[$id]);
- while(count($bot)){
- $end=count($bot)-1;
- if(!empty($bot[$end])){
- echo str_repeat(‘-‘,$end).$bot[$end][key($bot[$end])]."<br />\r\n";
- if(empty($pre[key($bot[$end])])){unset($bot[$end][key($bot[$end])]);}
- else{$bot[]=$pre[key($bot[$end])];}
- }
- else{array_splice($bot,-1);if($end){unset($bot[$end-1][key($bot[$end-1])]);}}
- }
- }
- $arr=array(
- array(‘id’=>1,’area’=>’北京’,’pid’=>0),
- array(‘id’=>4,’area’=>’易县’,’pid’=>3),
- array(‘id’=>3,’area’=>’保定’,’pid’=>2),
- array(‘id’=>2,’area’=>’河北’,’pid’=>0),
- array(‘id’=>5,’area’=>’海淀’,’pid’=>1),
- array(‘id’=>6,’area’=>’浙江’,’pid’=>0),
- array(‘id’=>7,’area’=>’杭州’,’pid’=>6),
- array(‘id’=>8,’area’=>’广东’,’pid’=>0),
- array(‘id’=>9,’area’=>’深圳’,’pid’=>8)
- );
- run($arr,0);
- ?>
复制代码但是这代码有个问题,二级地区的话没有上级城区索引。
还是先用你那个吧……
河北网友:分析了下,即便用array_search等函数也只不过把遍历过程写进了函数,实际查找还是需要每次都遍历数组。
解决根本问题需要在首次遍历数组时就把它复制进有索引的新数组,后期只需读新数组取键值即可。
我的方法是:
- <?php
- function run($arr,$id){
- static $pre=array();
- if(!$pre){foreach($arr as $row){$pre[$row[‘pid’]][$row[‘id’]]=$row[‘area’];}}
- $bot=empty($pre[$id])?array():array($pre[$id]);
- while(count($bot)){
- $end=count($bot)-1;
- if(!empty($bot[$end])){
- echo str_repeat(‘-‘,$end).$bot[$end][key($bot[$end])]."<br />\r\n";
- if(empty($pre[key($bot[$end])])){unset($bot[$end][key($bot[$end])]);}
- else{$bot[]=$pre[key($bot[$end])];}
- }
- else{array_splice($bot,-1);if($end){unset($bot[$end-1][key($bot[$end-1])]);}}
- }
- }
- $arr=array(
- array(‘id’=>1,’area’=>’北京’,’pid’=>0),
- array(‘id’=>4,’area’=>’易县’,’pid’=>3),
- array(‘id’=>3,’area’=>’保定’,’pid’=>2),
- array(‘id’=>2,’area’=>’河北’,’pid’=>0),
- array(‘id’=>5,’area’=>’海淀’,’pid’=>1),
- array(‘id’=>6,’area’=>’浙江’,’pid’=>0),
- array(‘id’=>7,’area’=>’杭州’,’pid’=>6),
- array(‘id’=>8,’area’=>’广东’,’pid’=>0),
- array(‘id’=>9,’area’=>’深圳’,’pid’=>8)
- );
- run($arr,0);
- ?>
复制代码但是这代码有个问题,二级地区的话没有上级城区索引。
还是先用你那个吧……
黑龙江网友:先根据pid排序,然后一条一条插入,一个foreach就可以解决了。
未经允许不得转载:美国VPS_搬瓦工CN2 GIA VPS » 有没有懂php的帮我看看代码。。。