annotate core/lib/Drupal/Component/Utility/DiffArray.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Component\Utility;
Chris@0 4
Chris@0 5 /**
Chris@0 6 * Provides helpers to perform diffs on multi dimensional arrays.
Chris@0 7 *
Chris@0 8 * @ingroup utility
Chris@0 9 */
Chris@0 10 class DiffArray {
Chris@0 11
Chris@0 12 /**
Chris@0 13 * Recursively computes the difference of arrays with additional index check.
Chris@0 14 *
Chris@0 15 * This is a version of array_diff_assoc() that supports multidimensional
Chris@0 16 * arrays.
Chris@0 17 *
Chris@0 18 * @param array $array1
Chris@0 19 * The array to compare from.
Chris@0 20 * @param array $array2
Chris@0 21 * The array to compare to.
Chris@0 22 *
Chris@0 23 * @return array
Chris@0 24 * Returns an array containing all the values from array1 that are not present
Chris@0 25 * in array2.
Chris@0 26 */
Chris@0 27 public static function diffAssocRecursive(array $array1, array $array2) {
Chris@0 28 $difference = [];
Chris@0 29
Chris@0 30 foreach ($array1 as $key => $value) {
Chris@0 31 if (is_array($value)) {
Chris@0 32 if (!array_key_exists($key, $array2) || !is_array($array2[$key])) {
Chris@0 33 $difference[$key] = $value;
Chris@0 34 }
Chris@0 35 else {
Chris@0 36 $new_diff = static::diffAssocRecursive($value, $array2[$key]);
Chris@0 37 if (!empty($new_diff)) {
Chris@0 38 $difference[$key] = $new_diff;
Chris@0 39 }
Chris@0 40 }
Chris@0 41 }
Chris@0 42 elseif (!array_key_exists($key, $array2) || $array2[$key] !== $value) {
Chris@0 43 $difference[$key] = $value;
Chris@0 44 }
Chris@0 45 }
Chris@0 46
Chris@0 47 return $difference;
Chris@0 48 }
Chris@0 49
Chris@0 50 }