Как я могу сравнить два многомерных массива? - PullRequest
0 голосов
/ 24 мая 2018
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"
            }
        }
    }

Я сравниваю их с этой функцией:

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

Результат:

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);, но это не сработало.

1 Ответ

0 голосов
/ 24 мая 2018

добавить что-то вроде:

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

не работает?

...