PHP - Mutidimensional array diff

前端 未结 3 1078
忘掉有多难
忘掉有多难 2021-01-14 20:43

i would like to ask for your help since I\'m having difficulty resolving this matter. I had created a function to facilitate on array diff but it does not suffice to my need

相关标签:
3条回答
  • 2021-01-14 21:26

    You want something more or less like this:

    public function array_diff_multidimensional($arr1, $arr2) {
        $answer = array();
        foreach($arr1 as $k1 => $v1) {
            // is the key present in the second array?
            if (!array_key_exists($k1, $arr2)) {
               $answer[$k1] = $v1; 
               continue;
            }
    
            // PHP makes all arrays into string "Array", so if both items
            // are arrays, recursively test them before the string check
            if (is_array($v1) && is_array($arr2[$k1])) {
                $answer[$k1] = array_diff_multidimensional($v1, $arr2[$k1]);
                continue;
            }
    
            // do the array_diff string check
            if ((string)$arr1[$k1] === (string)$arr2[$k1]) {
                continue;
            }
    
            // since both values are not arrays, and they don't match,
            // simply add the $arr1 value to match the behavior of array_diff
            // in the PHP core
            $answer[$k1] = $v1;
        }
    
        // done!
        return $answer;
    }
    
    0 讨论(0)
  • 2021-01-14 21:29

    This should do it, assuming all keys occur in both arrays:

    $diff = array();
    foreach ($session as $key => $values) {
        $diff[$key] = array_diff($values, $post[$key]);
    }
    

    Or, because I'm bored and array_map is underused:

    $diff = array_combine(
        array_keys($session),
        array_map(function ($a, $b) { return array_diff($a, $b); }, $session, $post)
    );
    

    (Assumed well ordered arrays though.)

    0 讨论(0)
  • 2021-01-14 21:41

    Not my function and not tested by me, but this was one of the first comments at php.net/array_diff (credit goes to thefrox at gmail dot com)

    <?php
    function multidimensional_array_diff($a1, $a2) {
        $r = array();
    
        foreach ($a2 as $key => $second) {
            foreach ($a1 as $key => $first) {
              if (isset($a2[$key])) {
                  foreach ($first as $first_value) {
                      foreach ($second as $second_value) {
                          if ($first_value == $second_value) {
                              $true = true;
                              break;
                          }
                      }
                      if (!isset($true)) {
                          $r[$key][] = $first_value;
                      }
                      unset($true);
                  }
              } else {
                  $r[$key] = $first;
              }
            }
        }
        return $r;
    }
    ?>
    
    0 讨论(0)
提交回复
热议问题