multidimensional array difference php

前端 未结 12 1169
离开以前
离开以前 2020-12-01 17:05

I have two multidimensional arrays and I want the difference. For eg. I have taken two-dimensional two arrays below

$array1 = Array (
       [a1] => Array         


        
12条回答
  •  日久生厌
    2020-12-01 17:17

    A better function that works just like the original array_diff.
    Compares array1 against one or more other arrays and returns the values in array1 that are not present in any of the other arrays recursively.

         $value) {
                foreach ($args as $item) {
                    if (is_array($item)) {
                        if (array_key_exists($key, $item)) {
                            if (is_array($value) && is_array($item[$key])) {
                                $tmpDiff = md_array_diff($value, $item[$key]);
    
                                if (!empty($tmpDiff)) {
                                    foreach ($tmpDiff as $tmpKey => $tmpValue) {
                                        if (isset($item[$key][$tmpKey])) {
                                            if (is_array($value[$tmpKey]) && is_array($item[$key][$tmpKey])) {
                                                $newDiff = array_diff($value[$tmpKey], $item[$key][$tmpKey]);
                                            } else if ($value[$tmpKey] !== $item[$key][$tmpKey]) {
                                                $newDiff = $value[$tmpKey];
                                            }
    
                                            if (isset($newDiff)) {
                                                $diff[$key][$tmpKey] = $newDiff;
                                            }
                                        } else {
                                            $diff[$key][$tmpKey] = $tmpDiff;
                                        }
                                    }
                                }
                            } else if ($value !== $item[$key]) {
                                $diff[$key] = $value;
    
                            }
                        } else {
                            $diff[$key] = $value;
                        }
                    }
                }
            }
    
            return $diff;
        }
    
        $arr1 = [
          "A" => [
            "A1" => ['A1-0', 'A1-1', 'A1-2', 'A1-3'],
            "A2" => ['A2-0', 'A2-1', 'A2-2', 'A2-3'],
            "A3" => ['A3-0', 'A3-1', 'A3-2', 'A3-3']
          ],
          "B" => [
            "B1" => ['B1-0', 'B1-1', 'B1-2', 'B1-3'],
            "B2" => ['B2-0', 'B2-1', 'B2-2', 'B2-3'],
            "B3" => ['B3-0', 'B3-1', 'B3-2', 'B3-3']
          ],
          'C' => 123
        ];
    
        $arr2 = [
          "A" => [
            "A1" => ['A1-1', 'A1-2', 'A1-3'],
            "A2" => ['A2-0', 'A2-1', 'A2-2', 'A2-3'],
            "A3" => ['A3-0', 'A3-1', 'A3-2']
          ],
          "B" => [
            "B1" => ['B1-0', 'B1-2', 'B1-3'],
            "B2" => ['B2-0', 'B2-1', 'B2-2', 'B2-3'],
            "B3" => ['B3-0', 'B3-1', 'B3-3']
          ]
        ];
    
        $arr3 = [
          "A" => [
            "A1" => ['A1-0', 'A1-1', 'A1-2', 'A1-3'],
            "A2" => ['A2-0', 'A2-1', 'A2-2', 'A2-3'],
            "A3" => ['A3-0', 'A3-1', 'A3-2']
          ],
          "B" => [
            "B1" => ['B1-0', 'B1-2', 'B1-3'],
            "B2" => ['B2-0', 'B2-1', 'B2-2', 'B2-3'],
            "B3" => ['B3-0', 'B3-1', 'B3-3']
          ]
        ];
    
        $diff = md_array_diff($arr1, $arr2, $arr3);
    
        ?>
        Will Output:
        array (size=3)
          'A' =>
              array (size=2)
                'A1' =>
                  array (size=1)
                    0 => string 'A1-0' (length=4)
                'A3' =>
                  array (size=1)
                    3 => string 'A3-3' (length=4)
          'B' =>
              array (size=2)
                'B1' =>
                  array (size=1)
                    1 => string 'B1-1' (length=4)
                'B3' =>
                  array (size=1)
                    2 => string 'B3-2' (length=4)
          'C' => int 123
    

提交回复
热议问题