php二維陣列去重
阿新 • • 發佈:2018-11-19
php二維陣列去重
前言:php一維陣列去重很簡單,直接array_unique($arr)即可,但是二維陣列去重就得自己去寫了
二維陣列去重方法:
/* * 二維陣列去重 * 注意:二維陣列中的元素個數必須一致,且鍵值也得一致,否則無意義 * @param array $arr * @return array $arr_after */ public function array_unique_2DArr($arr=array()){ if(empty($arr) || !is_array($arr)){ return array(); } /*******處理二維陣列個數不一致問題 start 其他專案用可以去掉*******/ //判斷陣列中二維陣列是否包含uniqueId,存在的話需要處理其他的日誌資訊,全部加上uniqueId,且uniqueId值必須相同 $hasUniqueId = false; foreach($arr as $val){ if(array_key_exists('uniqueId', $val)){ $hasUniqueId = true; break; } } //如果$arr中的二維陣列中uniqueId存在,則其他也增加 if($hasUniqueId){ foreach($arr as $_k=>$_val){ if(!array_key_exists('uniqueId', $_val)){ //在$_val中增加unique,只是為了和其他的帶有uniqueId鍵值的陣列元素個數保持一致 $_val_keys = array_keys($_val); $_val_vals = array_values($_val); array_unshift($_val_keys, 'uniqueId'); array_unshift($_val_vals, '0_0'); $arr[$_k] = array_combine($_val_keys, $_val_vals); } } } /********處理二維陣列個數不一致問題 end********/ foreach($arr[0] as $k => $v){ $arr_inner_key[]= $k; //先把二維陣列中的內層陣列的鍵值記錄在在一維陣列中 } foreach ($arr as $k => $v){ $v =join("^",$v); //降維 用implode()也行 ,注意,拆分時不能用逗號,用其他的不常用符號,逗號可能會由於資料本身含有逗號導致失敗 $temp[$k] =$v; //保留原來的鍵值 } $temp =array_unique($temp); //去重:去掉重複的字串 foreach ($temp as $k => $v){ $a = explode("^",$v); //拆分後的重組 $arr_after[$k]= array_combine($arr_inner_key,$a); //將原來的鍵與值重新合併 } return $arr_after; }