搜索

首页  >  问答  >  正文

php中如何判断多维无序数组是一样的?

示例如下:
实际操作的是三维数组,而且数据量比较大。


    $a = [ 
        ['name'=>'jack', 'gender'=>'male'], 
        ['age'=>18,'country'=>'China'] 
    ];
    $b = [ 
        ['country'=>'China','age'=>18], 
        ['gender'=>'male','name'=>'jack'] 
    ];

除了遍历比较外有什么快捷有效的方式?
我现在的想法是先把数组按相同规则排序,json_encode后使用md5校验。不过目前似乎并不能很好的实现排序。
不知各位有什么很好的方法?

PHPzPHPz2739 天前478

全部回复(4)我来回复

  • 大家讲道理

    大家讲道理2017-05-16 13:14:54

    //仅适用于纯关联数组
    function deep_ksort(&$arr) {

    ksort($arr); 
    foreach ($arr as &$a) { 
        if (is_array($a) && !empty($a)) { 
            deep_ksort($a); 
        } 
    } 

    }
    deep_ksort($a);
    deep_ksort($b);
    if(json_encode($a) == json_encode($b)){

        echo "两个数组相同";

    }


    //通用方法
    //此函数将多维数组转化为一维数组
    function multiToSingle($arr, $delimiter = '->',$key = ' ') {

    $resultAry = array();
    if (!(is_array($arr) && count($arr)>0)) {
        return false;
    }
    foreach ($arr AS $k=>$val) {
        $k = is_numeric($k) ? 0 :$k;    //若键是数字,则统一为0,避免索引不同导致数组的不同
        $newKey = trim($key . $k . $delimiter);
        if (is_array($val) && count($val)>0) {
            $resultAry = array_merge($resultAry, multiToSingle($val, $delimiter, $newKey));
        } else {
            $resultAry[] = $newKey . $val;
        }
    }
    return $resultAry;

    }
    //判断两数组是否全等
    function judge($a,$b)
    {

    $single_A = multiToSingle($a);
    $single_B = multiToSingle($b);
    $arr1 = array_diff($single_A,$single_B);
    $arr2 = array_diff($single_B,$single_A);

    if(empty($arr1) && empty($arr2)){

       echo "两数组全等";

    }else{

       echo "不全等";

    };

    }

    回复
    0
  • 迷茫

    迷茫2017-05-16 13:14:54

    你可以看看这个http://bbs.csdn.net/topics/36...,应该对你有用!

    回复
    0
  • 天蓬老师

    天蓬老师2017-05-16 13:14:54

    很简单啊,相同规则排完序,将数组转化为字符串,比较这两条字符串是否一样即可

    回复
    0
  • PHP中文网

    PHP中文网2017-05-16 13:14:54

    雷雷

    回复
    0
  • 取消回复