当前位置:首页 > PHP教程 > php数组 > 列表

php去除数组中重复数据

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-27 11:29:35 浏览: 评论:0 

去除数组中的重复数据,又叫排重,本文给出的函数和php原生array_unique的区别在于array_unique要求是字符串,而本函数可以是数组和对象

废话不多说,直接上代码:

  1. /** 
  2.          * 给数组排重 
  3.          * 与array_unique函数的区别:它要求val是字符串,而这个可以是数组/对象 
  4.          * 
  5.          * @param unknown_type $arr 要排重的数组 
  6.          * @param unknown_type $reserveKey 是否保留原来的Key 
  7.          * @return unknown 
  8.          */ 
  9.         static function m_ArrayUnique($arr, $reserveKey = false) 
  10.         { 
  11.             if (is_array($arr) && !emptyempty($arr)) 
  12.             { 
  13.                 foreach ($arr as $key => $value) 
  14.                 { 
  15.                     $tmpArr[$key] = serialize($value) . ''; 
  16.                 } 
  17.                 $tmpArr = array_unique($tmpArr); 
  18.                 $arr = array(); 
  19.                 foreach ($tmpArr as $key => $value) 
  20.                 { 
  21.                     if ($reserveKey) 
  22.                     { 
  23.                         $arr[$key] = unserialize($value); 
  24.                     } 
  25.                     else 
  26.                     { 
  27.                         $arr[] = unserialize($value); 
  28.                     } 
  29.                 } 
  30.             } 
  31.             return $arr; 
  32.         } 

代码很简单,却非常的实用,有需要的小伙伴可以直接拿去用的。

另附上其他网友的解决办法:

  1. <?php 
  2. $input = array("a" => "green","", "red","b" => "green", "","blue", "red","c" => "witer","hello","witer"); 
  3. //$result = array_unique($input); //去除重复元素 
  4. $result = a_array_unique($input);   //只留下单一元素 
  5. foreach($result as $aa) 
  6. { 
  7. echo $aa."<br />"; 
  8. } 
  9. function multi_unique($array) { 
  10.    foreach ($array as $k=>$na) 
  11.        $new[$k] = serialize($na); 
  12.    $uniq = array_unique($new); 
  13.    foreach($uniq as $k=>$ser) 
  14.        $new1[$k] = unserialize($ser); 
  15.    return ($new1); 
  16. } 
  17. function a_array_unique($array)//写的比较好 
  18. { 
  19.    $out = array(); 
  20.    foreach ($array as $key=>$value) { 
  21.        if (!in_array($value, $out)) 
  22. { 
  23.            $out[$key] = $value; 
  24.        } 
  25.    } 
  26.    return $out; 
  27. } 
  28. ?> 

PHP数组去除重复项 有个内置函数array_unique (),但是php的 array_unique函数只适用于一维数组,对多维数组并不适用,以下提供一个二维数组 的 array_unique函数,代码如下:

  1. function unique_arr($array2D,$stkeep=false,$ndformat=true) 
  2. { 
  3.     // 判断是否保留一级数组键 (一级数组键可以为非数字) 
  4.     if($stkeep) $stArr = array_keys($array2D); 
  5.     // 判断是否保留二级数组键 (所有二级数组键必须相同) 
  6.     if($ndformat) $ndArr = array_keys(end($array2D)); 
  7.     //降维,也可以用implode,将一维数组转换为用逗号连接的字符串 
  8.     foreach ($array2D as $v){ 
  9.         $v = join(",",$v); 
  10.         $temp[] = $v; 
  11.     } 
  12.     //去掉重复的字符串,也就是重复的一维数组 
  13.     $temp = array_unique($temp); 
  14.     //再将拆开的数组重新组装 
  15.     foreach ($temp as $k => $v) 
  16.     { 
  17.         if($stkeep) $k = $stArr[$k]; 
  18.         if($ndformat) 
  19.         { 
  20.             $tempArr = explode(",",$v); 
  21.             foreach($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval; 
  22.         } 
  23.         else $output[$k] = explode(",",$v); 
  24.     } 
  25.     return $output; 
  26. } 

演示:

  1. $array2D = array('first'=>array('title'=>'1111','date'=>'2222'),'second'=>array('title'=>'1111','date'=>'2222'),'third'=>array('title'=>'2222','date'=>'3333'));  
  2. print_r($array2D);  
  3. print_r(unique_arr($array2D,true)); 

Tags: php去除数组重复数据

分享到: