PHP二维数组去重复2018-12-18 02:18:48
PHP默认的数组去重重有直接的函数可用:
unique_arr($tmpArr);
参数说明:
array 必需。规定数组。
sortingtype 可选。规定如何比较数组元素/项目。可能的值:
SORT_STRING - 默认。把项目作为字符串来比较。
SORT_REGULAR - 把每一项按常规顺序排列(Standard ASCII,不改变类型)。
SORT_NUMERIC - 把每一项作为数字来处理。
SORT_LOCALE_STRING - 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)。
但是对于二维数组来说就达不到效果了,该怎么处理呢,直接见下面代码。。。
测试的数组必须是在二维度上完全重复(这里没有处理,将最重要的数据只要是重复了就判断为重复,看我的做法)
function stripMutiple($tmpArr){ $result = array();//save as result for return foreach($tmpArr as $key=>$value) { $bF = false; foreach($result as $val){ if($val[0]==$value[0]){//notice!!! $bF = true; break; } } if(!$bF)//passed the test $result[] = $value; //array_push($result,$value);//same affect } return $result; }
其中代码里注意部分,因为我的数组里子数组部分没有key,直接是这样的("orange","tasty","yellow");所以$val[0]的意思是,只要第一个值为orange我就判定为重复,就去除。如果你是这样("id":123,"name":"zhangSam",...)这种带key值的,那么判断语句if的地方就改为:$val["id"]=$value["id"];意思为如果id重复就判断为重复,一样能查出来;
如果更复杂,多项内容必须一模一样才算重复,可以将if语句改为
if($val[0]==$value[0] && $val["name"]==$value["name"]){//got it}
这样一样百分百的判断出来,只要判断出来后,就break不用查了,result里面已经有了,boolean型变量的修改就会抛弃掉它。
相信经过我的介绍,你已经可以举一返三了,其实就是两次嵌套遍历,逻辑简单效率还是可以,希望对大家有帮助哦!