有没有懂php的帮我看看代码。。。

搬瓦工机场JMS


学习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等函数也只不过把遍历过程写进了函数,实际查找还是需要每次都遍历数组。
解决根本问题需要在首次遍历数组时就把它复制进有索引的新数组,后期只需读新数组取键值即可。
我的方法是:

  1. <?php
  2. function run($arr,$id){
  3. static $pre=array();
  4. if(!$pre){foreach($arr as $row){$pre[$row[‘pid’]][$row[‘id’]]=$row[‘area’];}}
  5. $bot=empty($pre[$id])?array():array($pre[$id]);
  6. while(count($bot)){
  7. $end=count($bot)-1;
  8. if(!empty($bot[$end])){
  9. echo str_repeat(‘-‘,$end).$bot[$end][key($bot[$end])]."<br />\r\n";
  10. if(empty($pre[key($bot[$end])])){unset($bot[$end][key($bot[$end])]);}
  11. else{$bot[]=$pre[key($bot[$end])];}
  12. }
  13. else{array_splice($bot,-1);if($end){unset($bot[$end-1][key($bot[$end-1])]);}}
  14. }
  15. }
  16. $arr=array(
  17. array(‘id’=>1,’area’=>’北京’,’pid’=>0),
  18. array(‘id’=>4,’area’=>’易县’,’pid’=>3),
  19. array(‘id’=>3,’area’=>’保定’,’pid’=>2),
  20. array(‘id’=>2,’area’=>’河北’,’pid’=>0),
  21. array(‘id’=>5,’area’=>’海淀’,’pid’=>1),
  22. array(‘id’=>6,’area’=>’浙江’,’pid’=>0),
  23. array(‘id’=>7,’area’=>’杭州’,’pid’=>6),
  24. array(‘id’=>8,’area’=>’广东’,’pid’=>0),
  25. array(‘id’=>9,’area’=>’深圳’,’pid’=>8)
  26. );
  27. run($arr,0);
  28. ?>

复制代码但是这代码有个问题,二级地区的话没有上级城区索引。
还是先用你那个吧……
河北网友:分析了下,即便用array_search等函数也只不过把遍历过程写进了函数,实际查找还是需要每次都遍历数组。
解决根本问题需要在首次遍历数组时就把它复制进有索引的新数组,后期只需读新数组取键值即可。
我的方法是:

  1. <?php
  2. function run($arr,$id){
  3. static $pre=array();
  4. if(!$pre){foreach($arr as $row){$pre[$row[‘pid’]][$row[‘id’]]=$row[‘area’];}}
  5. $bot=empty($pre[$id])?array():array($pre[$id]);
  6. while(count($bot)){
  7. $end=count($bot)-1;
  8. if(!empty($bot[$end])){
  9. echo str_repeat(‘-‘,$end).$bot[$end][key($bot[$end])]."<br />\r\n";
  10. if(empty($pre[key($bot[$end])])){unset($bot[$end][key($bot[$end])]);}
  11. else{$bot[]=$pre[key($bot[$end])];}
  12. }
  13. else{array_splice($bot,-1);if($end){unset($bot[$end-1][key($bot[$end-1])]);}}
  14. }
  15. }
  16. $arr=array(
  17. array(‘id’=>1,’area’=>’北京’,’pid’=>0),
  18. array(‘id’=>4,’area’=>’易县’,’pid’=>3),
  19. array(‘id’=>3,’area’=>’保定’,’pid’=>2),
  20. array(‘id’=>2,’area’=>’河北’,’pid’=>0),
  21. array(‘id’=>5,’area’=>’海淀’,’pid’=>1),
  22. array(‘id’=>6,’area’=>’浙江’,’pid’=>0),
  23. array(‘id’=>7,’area’=>’杭州’,’pid’=>6),
  24. array(‘id’=>8,’area’=>’广东’,’pid’=>0),
  25. array(‘id’=>9,’area’=>’深圳’,’pid’=>8)
  26. );
  27. run($arr,0);
  28. ?>

复制代码但是这代码有个问题,二级地区的话没有上级城区索引。
还是先用你那个吧……
黑龙江网友:先根据pid排序,然后一条一条插入,一个foreach就可以解决了。

未经允许不得转载:美国VPS_搬瓦工CN2 GIA VPS » 有没有懂php的帮我看看代码。。。

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏