cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menentukan sama ada tatasusunan tidak tertib berbilang dimensi adalah sama dalam PHP?

Contohnya adalah seperti berikut:
Operasi sebenar ialah tatasusunan tiga dimensi dan jumlah data agak besar.


    $a = [
        ['name'=>'jack', 'jantina'=>'lelaki'],
        ['umur'=>18,'negara'=>'China']
    ];
    $b = [
        ['country'=>'China','age'=>18],
        ['jantina'=>'lelaki','name'=>'jack']
    ];

Selain melintasi dan membandingkan, adakah terdapat cara yang cepat dan berkesan?
Idea semasa saya ialah untuk mengisih tatasusunan mengikut peraturan yang sama dahulu, dan kemudian menggunakan pengesahan md5 selepas json_encoding. Namun, nampaknya pengasingan tidak dapat dilaksanakan dengan baik pada masa ini.
Saya tertanya-tanya sama ada anda mempunyai sebarang kaedah yang baik?

PHPzPHPz2739 hari yang lalu477

membalas semua(4)saya akan balas

  • 大家讲道理

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

    //Hanya terpakai pada tatasusunan bersekutu semata-mata
    fungsi 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 "两个数组相同";

    }


    //Kaedah umum
    //Fungsi ini menukar tatasusunan berbilang dimensi kepada tatasusunan satu dimensi
    fungsi 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;

    }
    //Hakim sama ada dua tatasusunan adalah kongruen
    fungsi hakim($a,$b)
    {

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

    jika(kosong($arr1) && kosong($arr2)){

       echo "两数组全等";

    }lain{

       echo "不全等";

    };

    }

    balas
    0
  • 迷茫

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

    Anda boleh lihat http://bbs.csdn.net/topics/36 ini..., ia sepatutnya berguna kepada anda!

    balas
    0
  • 天蓬老师

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

    Ia sangat mudah selepas mengisih mengikut peraturan yang sama, tukar tatasusunan kepada rentetan dan bandingkan sama ada dua rentetan itu sama.

    balas
    0
  • PHP中文网

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

    
    $a = [
        ['name' => 'jack', 'gender' => 'male'],
        ['age' => 18, 'country' => 'China']
    ];
    $b = [
        ['country' => 'China', 'age' => 18],
        ['gender' => 'male', 'name' => 'jack']
    ];
    
    
    function whetherDifferent($ele, $differentEle)
    {
        $toSingleArr = function ($target)use(&$toSingleArr){
                //转换为一维数组的代码
            return $target;
        };
        $ele=$toSingleArr($ele);
        $differentEle=$toSingleArr($differentEle);
        ksort($ele,true);
        ksort($differentEle,true);
        return $ele===$differentEle;
    }
    
    
    var_dump(whetherDifferent($a, $b));
    die;
    

    balas
    0
  • Batalbalas