dongxie3681 2018-05-24 08:23
浏览 131
已采纳

如何比较两个多维数组?

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"
            }
        }
    }

I compare them with this function:

    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>";

The result is:

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

This is working well. But what I would need is, both of the difference values - the original and the new one like this:

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

I tried to add this line $old_diff = array_diff_assoc_recursive($array2[$key], $value); but it did not work out.

  • 写回答

1条回答 默认 最新

  • dongliang1873 2018-05-24 08:36
    关注

    add something like:

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

    doesn't work ?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染