Mercurial > hg > isophonics-drupal-site
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 } |