multidimensional array difference php

前端 未结 12 1194
离开以前
离开以前 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:08

    Almost a copy of @bernhardh's answer but posting here because my edit was rejected. Uses + instead of array_merge as array_merge will reindex array causing issues with indexed arrays.

    /**
     * Given 2 arrays see what has changed when comparing defaults to the new values.
     *
     * @param array $defaults
     *   Array of default values.
      * @param mixed $new_values
     *   Array of new values.
     *
     * @return array
     *   Nested array strucutre; only the diff.
     */
    function array_diff_multi(array $defaults, $new_values) {
      $result = array();
    
      foreach ($defaults as $key => $val) {
        if (is_array($val) && isset($new_values[$key])) {
          $tmp = array_diff_multi($val, $new_values[$key]);
          if ($tmp) {
            $result[$key] = $tmp;
          }
        }
        elseif (!isset($new_values[$key])) {
          $result[$key] = NULL;
        }
        elseif ($val != $new_values[$key]) {
          $result[$key] = $new_values[$key];
        }
        if (isset($new_values[$key])) {
          unset($new_values[$key]);
        }
      }
    
      $result = $result + $new_values;
      return $result;
    }
    

提交回复
热议问题