PHP二维数组去重复项自定义函数

如果我们是一维数据去重复项就不要说了有直接的函数了,但二维数据php未提供函数了,下面小编来给大家推荐两个不错的二维数组去重复项自定义函数吧.

例1代码如下:

  1. function unique_array_2d($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. }
  27. $array2D = array(
  28. 'first'=>array('title'=>'1111','date'=>'2222'),
  29. 'second'=>array('title'=>'1111','date'=>'2222'),
  30. 'third'=>array('title'=>'2222','date'=>'3333')
  31. );
  32. echo "<pre>";
  33. print_r(unique_array_2d($array2D,true));
  34. /**
  35. * 将二维数组通过指定的 key 去重
  36. *
  37. * @param array $arr 要去重的数组
  38. * @param array $by 指定key去重,该参数不指定将返回 array()
  39. * @return array
  40. */
  41. function array_multunique($arr,$by = array()) {
  42. $temp = array();
  43. foreach($arr as $key => $val) {
  44. foreach($by as $v) {
  45. $temp[$key] .= isset($val[$v]) ? $val[$v] : '';
  46. }
  47. }
  48. return array_intersect_key($arr,array_unique($temp));
  49. }
  50. /*$aa = array (
  51. array ('id' => 123, 'name' => '张三' ),
  52. array ('id' => 123, 'name' => '李四' ),
  53. array ('id' => 124, 'name' => '王五' ),
  54. array ('id' => 125, 'name' => '赵六' ),
  55. array ('id' => 126, 'name' => '赵六' )
  56. );
  57. $key = 'id';
  58. array_multunique ($aa, array('id')); */
  59. function array_remove_key($array,$keys){
  60. if (!is_array($array) || !is_array($keys)){
  61. return false;
  62. }
  63. foreach($array as $t){
  64. foreach($keys as $k){
  65. unset($t[$k]);
  66. }
  67. $doc[]=$t;
  68. }
  69. return $doc;
  70. }
  71. /*$array = array(
  72. '0' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee')),
  73. '1' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee'))
  74. );
  75. print_r( array_remove_key($array,array('c')));*/
  76. function array_remove_key_val(&$a,$b,$c){
  77. foreach ($a as $key=>$value){
  78. if ( isset($value[$b]) && ($value[$b]==$c) ){
  79. unset($a[$key]);
  80. }
  81. }
  82. }
  83. /*$a=array(
  84. array('id'=>1,'num'=>10,'type'=>'news'),
  85. array('id'=>2,'num'=>100,'type'=>'pic')
  86. );
  87. print_r( array_remove_key_val($a,"id","1") );*/

例2代码如下:

  1. /二维数组去掉重复值
  2. function array_unique_fb($array2D){
  3. foreach ($array2D as $v){
  4. $v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
  5. $temp[] = $v;
  6. }
  7. $temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
  8. foreach ($temp as $k => $v){
  9. $temp[$k] = explode(",",$v); //再将拆开的数组重新组装
  10. }
  11. return $temp;
  12. }
  13. //二维数组去掉重复值 并保留键值
  14. function array_unique_fb($array2D){
  15. foreach ($array2D as $k=>$v){
  16. $v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
  17. $temp[$k] = $v;
  18. }
  19. $temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
  20. foreach ($temp as $k => $v){
  21. $array=explode(",",$v); //再将拆开的数组重新组装
  22. $temp2[$k]["id"] =$array[0];
  23. $temp2[$k]["litpic"] =$array[1];
  24. $temp2[$k]["title"] =$array[2];
  25. $temp2[$k]["address"] =$array[3];
  26. $temp2[$k]["starttime"] =$array[4];
  27. $temp2[$k]["endtime"] =$array[5];
  28. $temp2[$k]["classid"] =$array[6];
  29. $temp2[$k]["ename"] =$array[7];
  30. }
  31. return $temp2;
  32. }