class DiffArray

Provides helpers to perform diffs on multi dimensional arrays.

Hierarchy

Expanded class hierarchy of DiffArray

1 file declares its use of DiffArray
DiffArrayTest.php in drupal/core/tests/Drupal/Tests/Core/Common/DiffArrayTest.php
Contains \Drupal\Tests\Core\Common\DiffArrayTest.

File

drupal/core/lib/Drupal/Component/Utility/DiffArray.php, line 13
Contains Drupal\Component\Utility\DiffArray.

Namespace

Drupal\Component\Utility
View source
class DiffArray {

  /**
   * Recursively computes the difference of arrays with additional index check.
   *
   * This is a version of array_diff_assoc() that supports multidimensional
   * arrays.
   *
   * @param array $array1
   *   The array to compare from.
   * @param array $array2
   *   The array to compare to.
   *
   * @return array
   *   Returns an array containing all the values from array1 that are not present
   *   in array2.
   */
  public static function diffAssocRecursive(array $array1, array $array2) {
    $difference = array();
    foreach ($array1 as $key => $value) {
      if (is_array($value)) {
        if (!array_key_exists($key, $array2) || !is_array($array2[$key])) {
          $difference[$key] = $value;
        }
        else {
          $new_diff = static::diffAssocRecursive($value, $array2[$key]);
          if (!empty($new_diff)) {
            $difference[$key] = $new_diff;
          }
        }
      }
      elseif (!array_key_exists($key, $array2) || $array2[$key] !== $value) {
        $difference[$key] = $value;
      }
    }
    return $difference;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DiffArray::diffAssocRecursive public static function Recursively computes the difference of arrays with additional index check.