php二维数组如何去重?(代码示例)

来源:转载 发布时间:2018-11-23 11:24:17 阅读量:797

本篇文章给大家带来的内容是介绍php二维数组如何去重?(代码示例),让大家了解二维数组去重的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

前言:php一维数组去重很简单,直接array_unique($arr)即可,但是二维数组是如何去重的?

下面我们就通过简单的代码示例来看看二维数组去重的方法:

代码示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

/*

 * 二维数组去重

 * 注意:二维数组中的元素个数必须一致,且键值也得一致,否则无意义

 * @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

}


标签: PHP
分享:
评论:
你还没有登录,请先