(PHP 5, PHP 7, PHP 8)
array_udiff_uassoc — Вычисляет расхождение в массивах с дополнительной проверкой индексов, используя для сравнения значений и индексов callback-функцию
$array
,...$arrays
,$value_compare_func
,$key_compare_func
Вычисляет расхождение в массивах с дополнительной проверкой индексов, используя для сравнения значений и индексов callback-функцию.
Обратите внимание, что для сравнения используются ключи, в отличие от array_diff() и array_udiff().
array
Первый массив.
arrays
Массивы для сравнения.
value_compare_func
Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим, чем второй.
Возвращение нецелых значений из функции сравнения,
таких как число с плавающей точкой (float), приведёт к внутреннему
приведению возвращаемого значения callback-функции к целому числу (int).
Таким образом, значения 0.99
и 0.1
будут
приведены к целочисленному значению 0
,
что позволит сравнить эти значения как равные.
key_compare_func
Сравнение ключей (индексов) также осуществляется с помощью callback-функции
key_compare_func
. Это отличается от
поведения array_udiff_assoc(), которая
сравнивает индексы с помощью встроенной функции.
Возвращает массив (array), содержащий все элементы
array
, которых нет в каком-либо из
остальных аргументов.
Пример #1 Пример использования array_udiff_uassoc()
<?php
class cr {
private $priv_member;
function __construct($val)
{
$this->priv_member = $val;
}
static function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
static 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");
.