You are here

public static function DiffArray::diffAssocRecursive in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Component/Utility/DiffArray.php \Drupal\Component\Utility\DiffArray::diffAssocRecursive()

Recursively computes the difference of arrays with additional index check.

This is a version of array_diff_assoc() that supports multidimensional arrays.

Parameters

array $array1: The array to compare from.

array $array2: The array to compare to.

Return value

array Returns an array containing all the values from array1 that are not present in array2.

1 call to DiffArray::diffAssocRecursive()
DiffArrayTest::testDiffAssocRecursive in core/tests/Drupal/Tests/Core/Common/DiffArrayTest.php
Tests DiffArray::diffAssocRecursive().

File

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

Class

DiffArray
Provides helpers to perform diffs on multi dimensional arrays.

Namespace

Drupal\Component\Utility

Code

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;
}