Функция PHP array_udiff_uassoc

array array_udiff_uassoc ( array array1, array array2 [, array ..., callback data_compare_func, callback key_compare_func] )

array_udiff_uassoc() возвращает array, все значения параметра array1, отсутствующие в последующих аргументах. Обратите внимание, что для сравнения используются ключи, в отличие от array_diff() и array_udiff(). Сравнение значений массива происходит при помощи определённой пользователем функции обратного вызова: data_compare_func. В этом смысле поведение отличается от поведения array_diff_assoc(), использующей для сравнения внутреннюю функцию. Сравнение ключей (индексов) происходит также при помощи определённой пользователем функции обратного вызова key_compare_func. Это поведение отлично от поведения array_udiff_assoc(), которая использует для сравнения ключей встроенную функцию.

Пример использованияarray_udiff_uassoc()

<?php
   class cr {
      private $priv_member;
      function cr($val)  {
         $this->priv_member = $val;
      }
     
      function comp_func_cr($a, $b)  {
         if ($a->priv_member === $b->priv_member) return 0;
         return ($a->priv_member > $b->priv_member)? 1:-1;
      }
     
      function comp_func_key($a, $b)  {
        if ($a === $b) return 0;
        return ($a > $b)? 1:-1;
      }
   }
   $a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
  
   $b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
  
   $result = array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"),  array("cr", "comp_func_key"));
  
   print_r($result);
?>

Результат выполнения данного примера:

Array  (  [0.1] => cr Object  (  [priv_member:private] => 9  )  [0.5] => cr Object  (  [priv_member:private] => 12  )  [0] => cr Object  (  [priv_member:private] => 23  )  )

В вышеприведённом примере вы можете видеть, что пара "1" => new cr(4) присутствует в обоих массивах и поэтому отсутствует в выводе функции. Держите в уме, что вы можете использовать две функции обратного вызова.

Для сравнения используется функция, определённая пользователем. Она должна возвращать целое число меньшее, равное или большее нуля, если первый параметр, соответственно, должен считаться меньше, равен или больше второго.

Замечание: Пожалуйста, обратите внимание, что эта функция обрабатывает только одно измерение многомерного массива. Разумеется, вы можете обработать более одного измерения, используя array_udiff_uassoc($array1[0], $array2[0], "data_compare_func", "key_compare_func");.

См. также array_diff(), array_diff_assoc(), array_diff_uassoc(), array_udiff(), array_udiff_assoc(), array_intersect(), array_intersect_assoc(), array_uintersect(), array_uintersect_assoc() и array_uintersect_uassoc().