最近做项目遇到一个问题。就是数组去重的问题。
问题描述,搜索筛选,并且返回一级分类下二级分类
自己琢磨了好久,思路是有的,就是实际写起来的时候遇到一点问题。
大概的思路是:当你筛选的关键字,你在模糊查询的时候如果一级分类能查到,那么遍历一级分类 查询二级分类。如果有值就直接返回。
如果一级分类没有查到。那么就要模糊查询二级分类。当你查询二级分类的时候 查到二级分类之后,需要返回该二级分类上面的一级分类。
难点就在于模糊查询二级分类,然后遍历二级分类来查询一级分类。这样一级分类就需要去重。而且二级分类里面也是乱的
这样 线上代码
一级分类遍历查询二级分类我就不在上代码了。 我直接安排二级分类遍历查询一级 然后去重,去不同字段。
1.先查询二级分类

$childen=db('pw_department')->where('hospital_id',$hospital_id)->where('department_name','like',"%$search%")->where('up_id','neq',0)->select();if($childen){foreach($childen as $k => $v){$one_list = db('pw_department')->where('department_id',$v['up_id'])->find();if($one_list['department_id'] === $v['up_id']){$one_list['childen_list'] = $childen;}$arr[] = $one_list;}
}else{$department_list = [];
}

2.去重并且去掉不同的二级分类

$department = model('Apimodel')->two_array_unique($arr);//根据返回的arr进行数组去重//遍历去重后的数组,然后进行判断  如果上级id不等于第一层的department_id   直接删除$kkforeach($department as $k => $v){foreach($v['childen_list'] as $kk => $vv){if($vv['up_id'] !== $v['department_id']){unset($department[$k]['childen_list'][$kk]);}}}$department_list = $department;

3.这是我封装的去重代码,亲测有效

function two_array_unique($arr){$tmp = array();$result = array();$childen = array();foreach($arr as $key => $val){$tmp[$key] = json_encode($val);}unset($val);$final = array_unique($tmp);foreach($final as $key => $val){$result[$key] = json_decode($val, true);}return $result;}

4.整体代码

$childen = db('pw_department')->where('hospital_id',$hospital_id)->where('department_name','like',"%$search%")->where('up_id','neq',0)->select();
if($childen){foreach($childen as $k => $v){$one_list = db('pw_department')->where('department_id',$v['up_id'])->find();if($one_list['department_id'] === $v['up_id']){$one_list['childen_list'] = $childen;}$arr[] = $one_list;}$department = model('Apimodel')->two_array_unique($arr);//根据返回的arr进行数组去重//遍历去重后的数组,然后进行判断  如果上级id不等于第一层的department_id   直接删除$kkforeach($department as $k => $v){foreach($v['childen_list'] as $kk => $vv){if($vv['up_id'] !== $v['department_id']){unset($department[$k]['childen_list'][$kk]);}}}$department_list = $department;
}else{$department_list = [];
}

到此为止 全部ok

PHP --- 数组去重相关推荐

  1. javascript ES6有趣的Set,数组去重、并集、交集、差集

    Set 对象存储的值总是唯一的 Set 对象方法 方法 描述 add 添加某个值,返回Set对象本身. clear 删除所有的键/值对,没有返回值. delete 删除某个键,返回true.如果删除失 ...

  2. Js面试题(一)--js实现数组去重怎么实现?

    方法1.创建一个新的临时数组来保存数组中已有的元素 方法2.使用哈希表存储已有元素 方法3.使用indexof判断数组元素第一次出现的位置是否为当前位置 方法4.先排序再去重 第一种方法和第三种方法都 ...

  3. 数组去重,ES6数组去重 new Set()

    普通数组去重 var b = [...new Set([1,2, 3, 4, 5, 5, 5, 5])]console.log(b); 输出结果: 包含对象的数组去重 var o ={a:1}var ...

  4. js判断数组中重复元素并找出_面试中常遇见的数组去重

    导读 JS数组去重是面试中并不少见的问题,听起来很简单,当你兴高采烈地回答了你的方法之后,你以为这道题就结束了吗?No,一般来说,面试官会继续问你"除了你刚刚说的方法,还有其他更好的方法吗? ...

  5. 去重查询_《前端算法系列》数组去重

    虽然算法在前端开发中很少会得以使用,但是了解常用的算法,熟悉各种算法的性能和优劣,将会让你在前端的道路上走的更远. 前言 文中所有代码位于位于此代码仓库中,大家可以下载代码进行学习.推敲和改进.另,如 ...

  6. 数组去重的正确编写姿势

    引言 数组去重是前端面试的一个必备题目,其具体表现内容为:怎样去掉Javascript的Array的重复项.问题简单直接,咱们也废话不多说,直入主题吧. 一般姿势 使用数组的indexOf()方法可以 ...

  7. js数组去重(多种方法)

    1 // js数组去重 2 Array.prototype.fun1 = function(){ 3 var arr = this, 4 result = [], 5 i, 6 len = arr.l ...

  8. php 数组去重_数组去重(JavaScript 为例)

    数组去重,就是在数组中查找相同的元素,保留其中一个,去除其他元素的程. 从这句话揭示了数组去重的两个关键因素: 找到重复项 去除重复项 本文告诉你在遇到去重问题时该如何思考,并以 JavaScript ...

  9. js 查找树节点 数组去重

    //查找树节点function findData(curOrg, id) {var array = [];if ((typeof curOrg == 'object') && (cur ...

  10. 数组去重--这几种方法够不?

    数组去重,是校招面试的必考知识点.简单的说,数组去重就是将一个数组中的相同的元素删除,只保留其中的一个.这里的相同其实是一个陷阱,有好多同学只认为值相等即为相同,而忽略类类型的判断.所以大家在进行数组 ...

最新文章

  1. OPENFIRE支持EMOJI
  2. 58回应“简历数据泄露”:将展开追查并加固安全系统
  3. LeetCode——15. 3Sum
  4. 若依JAVA开源框架自动生成代码步骤记录-创建子module以及导入子module相关问题
  5. java资源文件获取属性_Java读写资源文件类Properties
  6. pta c语言 凯撒密码
  7. SAP自学指南:案例公司的特点
  8. 腾讯云弹性MapReduce
  9. 【图像处理技术】 | 黑科技解读 之 PS检测、弯曲拉平、切边增强、摩尔纹
  10. android椭圆形形框_什么是计算机硬件上的椭圆形Kong?
  11. 修改远程桌面3389端口
  12. [ASP.NET MVC 小牛之路]16 - Model 验证
  13. h5前端IE浏览器低版本判断及升级提示
  14. 惊了 消息中间件合集:MQ(ActiveMQ/RabbitMQ/RocketMQ)+Kafka+笔记
  15. listview头部嵌套RecyclerView 完美实现竖向listview头部为横向listview
  16. 如何在网上选到一瓶心仪的红酒?通过文本分析预测葡萄酒的质量
  17. 熊掌号PHP,百度熊掌号广受站长关注,phpcm网站程序的熊掌号页面改造插件也火了!...
  18. 下载土豆视频——像个极客那样
  19. 内容超出DIV宽高后隐藏或出现滚动条和overflow的属性
  20. Nginx 自编译及编译参数详解

热门文章

  1. U盘杀毒结果文件都没了,怎么办
  2. Rosetta基础2:preparing ligand
  3. oracle adjusting parallel,Oracle 参数之_undo_autotune
  4. 黑莓的转型:如何成为一家网络安全公司?
  5. 4保安绑架轮奸女子 海口警方4小时破案
  6. “意见反馈”DEMO
  7. 解决:Anaconda创建虚拟环境时出现An HTTP error occurred when trying to retrieve this URL.anaconda
  8. c语言休止符用法,休止符写法详解
  9. 聊聊火出圈的ChatGPT
  10. OpenWrt开发必备软件模块——无线技术与PPPoE