Advertisement
relax4o

array_diff_recursive2

Aug 20th, 2017
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.14 KB | None | 0 0
  1. <?php
  2. /**
  3. Откриване на разликите според двата масива, а не само според първия
  4. */
  5.  
  6. $arr1 = array(
  7.         'key1' => 2,
  8.         'key2' => 4,
  9.         'key3' => array(1, 2,
  10.                         array(1,4,3,5,
  11.                               array(10, 13, 20)),
  12.                         7),
  13.         'key4' => 1,
  14. );
  15.  
  16. $arr2 = array(
  17.         'key1' => 2,
  18.         'key2' => 5,
  19.         'key3' => array(1, 2,
  20.                         array(1,34,3,5,
  21.                               array(10, 15, 20)),
  22.                         7),
  23.        
  24. );
  25.  
  26. function array_diff_recursive($a1, $a2) {
  27.     $result = array();
  28.     $loopArray = (sizeof($a1) >= sizeof($a2)) ? $a1 : $a2;
  29.     $len = sizeof($loopArray);
  30.  
  31.     $quit = false;
  32.     for ( $i = 0; $i < $len; $i++ ) {
  33.         $oppositeArray = ($loopArray === $a1) ? $a2 : $a1;
  34.         $oppositeArrayKeys = array_keys($oppositeArray);
  35.         $loopArrayKeys = array_keys($loopArray);
  36.  
  37.         if ( array_key_exists($loopArrayKeys[$i], $oppositeArray) ) {
  38.             if ( is_array($loopArray[$loopArrayKeys[$i]]) && is_array($oppositeArray[$loopArrayKeys[$i]]) ) {
  39.                 $result[$loopArrayKeys[$i]] = array_diff_recursive($loopArray[$loopArrayKeys[$i]], $oppositeArray[$loopArrayKeys[$i]]);
  40.             }
  41.             else {
  42.                 if ( $loopArray[$loopArrayKeys[$i]] !== $oppositeArray[$loopArrayKeys[$i]] ) {
  43.                     $result[$loopArrayKeys[$i]] = $loopArray[$loopArrayKeys[$i]];
  44.                 }
  45.             }
  46.         } else {
  47.             $result[$loopArrayKeys[$i]] = $loopArray[$loopArrayKeys[$i]];
  48.         }
  49.  
  50.         if ( $i == ($len-1) && !$quit ) {
  51.             $temp = $oppositeArray;
  52.             $oppositeArray = $loopArray;
  53.             $loopArray = $temp;
  54.             $i = 0;
  55.             $quit = true;
  56.             $len = sizeof($loopArray);
  57.         }
  58.     }
  59.    
  60.     return $result;
  61. }
  62.  
  63. $multi_diff = array_diff_recursive($arr1, $arr2);
  64.  
  65. // Tests
  66. echo "<pre>";
  67. echo "Array 1:\n";
  68. print_r($arr1);
  69. echo "\n\nArray 2:\n";
  70. print_r($arr2);
  71. echo "\n\nMulti diff:\n";
  72. print_r($multi_diff);
  73. echo "</pre>";
  74. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement