【问题标题】:How can I compare two multidimensional arrays?如何比较两个多维数组?
【发布时间】:2018-05-24 08:23:33
【问题描述】:
I compare these two arrays:

$array1:

   array(3) {
          [0]=>
          array(10000) {
            ["12345"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 19:46:25"
              ["fileName"]=>
              string(46) "monkey.jpg"
              ["path"]=>
              string(149) "Volumes/animals/monkey.jpg"
              ["size"]=>
              string(7) "2650752"
            }
            ["678790"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "elephant.jpg"
              ["path"]=>
              string(171) "Volumes/animals/elephant.jpg"
              ["size"]=>
              string(7) "2306688"
            }
            ["23123"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "fred.jpg"
              ["path"]=>
              string(171) "Volumes/animals/fred.jpg"
              ["size"]=>
              string(7) "2306688"
            }
          }    
         [1]=>
          array(10000) {
            ["624245"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 19:46:25"
              ["fileName"]=>
              string(46) "duck.jpg"
              ["path"]=>
              string(149) "Volumes/animals/duck.jpg"
              ["size"]=>
              string(7) "2650752"
            }
            ["934522"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "lora.jpg"
              ["path"]=>
              string(171) "Volumes/animals/lora.jpg"
              ["size"]=>
              string(7) "2306688"
            }
            ["832452"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "sam.jpg"
              ["path"]=>
              string(171) "Volumes/animals/sam.jpg"
              ["size"]=>
              string(7) "2306688"
            }
          }
        [2]=>
          array(1500) {
            ["234214"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 19:46:25"
              ["fileName"]=>
              string(46) "chi.jpg"
              ["path"]=>
              string(149) "Volumes/animals/chi.jpg"
              ["size"]=>
              string(7) "2650752"
            }
            ["942134"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "ape.jpg"
              ["path"]=>
              string(171) "Volumes/animals/ape.jpg"
              ["size"]=>
              string(7) "2306688"
            }
            ["234234"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "cat.jpg"
              ["path"]=>
              string(171) "Volumes/animals/cat.jpg"
              ["size"]=>
              string(7) "2306688"
            }
        }
    }

$array2:

   array(3) {
          [0]=>
          array(10000) {
            ["12345"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 19:46:25"
              ["fileName"]=>
              string(46) "monkei.jpg"
              ["path"]=>
              string(149) "Volumes/animals/monkey.jpg"
              ["size"]=>
              string(7) "2650752"
            }
            ["678790"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "elephant.jpg"
              ["path"]=>
              string(171) "Volumes/animals/elephant.jpg"
              ["size"]=>
              string(7) "2306688"
            }
            ["23123"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "fred.jpg"
              ["path"]=>
              string(171) "Volumes/animals/fred.jpg"
              ["size"]=>
              string(7) "2306688"
            }
          }    
         [1]=>
          array(10000) {
            ["624245"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 19:46:25"
              ["fileName"]=>
              string(46) "duck.jpg"
              ["path"]=>
              string(149) "Volumes/animals/duck.jpg"
              ["size"]=>
              string(7) "2650752"
            }
            ["934522"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "lora.jpg"
              ["path"]=>
              string(171) "Volumes/animals/lora.jpg"
              ["size"]=>
              string(7) "2306688"
            }
            ["832452"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "sam.jpg"
              ["path"]=>
              string(171) "Volumes/animals/sam.jpg"
              ["size"]=>
              string(7) "2306688"
            }
          }
        [2]=>
          array(1500) {
            ["234214"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 19:46:25"
              ["fileName"]=>
              string(46) "chi.jpg"
              ["path"]=>
              string(149) "Volumes/animals/chi.jpg"
              ["size"]=>
              string(7) "2650752"
            }
            ["942134"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "ape.jpg"
              ["path"]=>
              string(171) "Volumes/animals/ape.jpg"
              ["size"]=>
              string(7) "2306688"
            }
            ["234234"]=>
            array(5) {
              ["dateTime"]=>
              string(19) "2016-10-12 14:39:43"
              ["fileName"]=>
              string(45) "cat.jpg"
              ["path"]=>
              string(171) "Volumes/animals/cat.jpg"
              ["size"]=>
              string(7) "2306688"
            }
        }
    }

我将它们与这个函数进行比较:

    function array_diff_assoc_recursive($array1, $array2){
                    foreach($array1 as $key => $value){
                        if(is_array($value)){
                            if(!isset($array2[$key])){
                                $difference[$key] = $value;
                            }
                            elseif(!is_array($array2[$key])){
                                $difference[$key] = $value;
                            }
                            else{
                                $new_diff = array_diff_assoc_recursive($value, $array2[$key]);
                                if($new_diff != FALSE)
                                {
                                    $difference[$key] = $new_diff;
                                }
                            }
                        }
                        elseif(!isset($array2[$key]) || $array2[$key] != $value){
                            $difference[$key] = $value;
                        }
                    }
                    return !isset($difference) ? 0 : $difference;
                }


                echo "<pre>";
                print_r(array_diff_assoc_recursive($array1, $array2));
                echo "</pre>";

结果是:

array(1) {
  [0]=>
  array(1) {
    ["12345"]=>
    array(1) {
      ["fileName"]=>
      string(46) "monkey.jpg"
    }
  }
}

这运作良好。但我需要的是,两个不同的值 - 原来的和新的都是这样的:

array(1) {
  [0]=>
  array(1) {
    ["12345"]=>
    array(2) {
      ["fileName1"]=>
      string(46) "monkey.jpg"
      ["fileName2"]=>
      string(46) "monkei.jpg"
    }
  }
}

我尝试添加此行$old_diff = array_diff_assoc_recursive($array2[$key], $value);,但没有成功。

【问题讨论】:

    标签: php multidimensional-array compare array-difference


    【解决方案1】:

    添加类似:

    elseif(!isset($array2[$key]) || $array2[$key] != $value) {
        $difference[$key."1"] = $value;
        $difference[$key."2"] = $array2[$key];
    }
    

    没有用?

    【讨论】:

      猜你喜欢
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      相关资源
      最近更新 更多