设为首页收藏本站

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 75|回复: 9

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

[复制链接]

50

主题

103

回帖

400

积分

中级会员

积分
400
发表于 2019-11-6 23:21:29 | 显示全部楼层 |阅读模式





学习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一遍,是不是最优化了??

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

134

主题

2050

回帖

4558

积分

论坛元老

积分
4558
发表于 2019-11-6 23:35:11 | 显示全部楼层
本帖最后由 30826 于 2019-11-6 23:41 编辑

看半天没搞懂你的需求是什么?
更新:看懂了,等我拉完屎想想
回复

使用道具 举报

4

主题

82

回帖

198

积分

注册会员

积分
198
发表于 2019-11-6 23:28:15 | 显示全部楼层
看起来不像最优解
回复

使用道具 举报

29

主题

212

回帖

537

积分

高级会员

积分
537
发表于 2019-11-6 23:33:42 | 显示全部楼层
显然不是最优解…
回复

使用道具 举报

455

主题

2272

回帖

6023

积分

论坛元老

积分
6023
发表于 2019-11-6 23:36:24 | 显示全部楼层
好久没用PHP了, 这语法真是槽点。 就跟GO的语法很**一样。
回复

使用道具 举报

2

主题

117

回帖

262

积分

中级会员

积分
262
发表于 2019-11-6 23:40:06 | 显示全部楼层

30826 发表于 2019-11-6 23:35

看半天没搞懂你的需求是什么?

三级联动
就是选地区那个

用的无限级pid方法
回复

使用道具 举报

2

主题

688

回帖

1404

积分

金牌会员

积分
1404
发表于 2019-11-6 23:35:00 | 显示全部楼层
"

求最优写法
回复

使用道具 举报

50

主题

103

回帖

400

积分

中级会员

积分
400
 楼主| 发表于 2019-11-6 23:40:42 | 显示全部楼层

1204927751 发表于 2019-11-6 23:43

求最优写法

如果确定只有三级联动,可以用 json 那种数据格式,就是子地区放在父地区的数据内,你这个数据存放方式 是类似常规的数据库 一行一数据 那种,思路是无限级联动的做法。

另外数组中可以直接用 $arr[1] = array(xxx) 而不需要 id 这个键,取的时候也直接 $arr[1] 取出数据,就可以避免你说的 每读一行都要 foreach 一遍所有数据。

在日常开发中,具体需求具体分析,有些时候确实只能用你这个方案,有时可以偷懒省掉很多啰嗦代码,虽然运行效率提高了,但通用性就比较差(比如我说的那样… 可能会被老师打…
回复

使用道具 举报

29

主题

212

回帖

537

积分

高级会员

积分
537
发表于 2019-11-6 23:43:53 | 显示全部楼层
分析了下,即便用array_search等函数也只不过把遍历过程写进了函数,实际查找还是需要每次都遍历数组。
解决根本问题需要在首次遍历数组时就把它复制进有索引的新数组,后期只需读新数组取键值即可。
我的方法是:
[ol]
  • 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);
  • ?>[/ol]复制代码
    但是这代码有个问题,二级地区的话没有上级城区索引。
    还是先用你那个吧……三级联动你可以去看看网上用JS怎么写,然后用PHP弄出来,我记得不用写这么多行啊,我以前的三级联动抛开JS应该可以做到20行以内写完啊
  • 回复

    使用道具 举报

    0

    主题

    2

    回帖

    8

    积分

    新手上路

    积分
    8
    发表于 2019-11-6 23:33:00 | 显示全部楼层
    先根据pid排序,然后一条一条插入,一个foreach就可以解决了。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|Discuz! X

    GMT+8, 2025-12-19 20:44 , Processed in 0.020069 second(s), 8 queries , Gzip On, Redis On.

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

    快速回复 返回顶部 返回列表