array_udiff
(PHP 5, PHP 7)
array_udiff — Вычисляет расхождение массивов, используя для сравнения callback-функцию
Описание
Вычисляет расхождение массивов, используя для сравнения данных callback-функцию. Это отличается от поведения array_diff(), которая использует встроенную функцию для сравнения данных.
Список параметров
-
array
-
Первый массив.
-
arrays
-
Массивы для сравнения.
-
value_compare_func
-
Callback-функция, используемая для сравнения.
Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим, чем второй.
Возвращаемые значения
Возвращает массив, содержащий все элементы array
,
которые не существуют в каком-либо из других аргументов.
Примеры
Пример #1 Пример использования array_udiff() с объектами класса stdClass
<?php
// массивы для сравнения
$array1 = array(new stdclass, new stdclass,
new stdclass, new stdclass,
);
$array2 = array(
new stdclass, new stdclass,
);
// проставление некоторых свойств для объектов
$array1[0]->width = 11; $array1[0]->height = 3;
$array1[1]->width = 7; $array1[1]->height = 1;
$array1[2]->width = 2; $array1[2]->height = 9;
$array1[3]->width = 5; $array1[3]->height = 7;
$array2[0]->width = 7; $array2[0]->height = 5;
$array2[1]->width = 9; $array2[1]->height = 2;
function compare_by_area($a, $b) {
$areaA = $a->width * $a->height;
$areaB = $b->width * $b->height;
if ($areaA < $areaB) {
return -1;
} elseif ($areaA > $areaB) {
return 1;
} else {
return 0;
}
}
print_r(array_udiff($array1, $array2, 'compare_by_area'));
?>
Результат выполнения данного примера:
Array ( [0] => stdClass Object ( [width] => 11 [height] => 3 ) [1] => stdClass Object ( [width] => 7 [height] => 1 ) )
Пример #2 Пример использования array_udiff() с объектами класса DateTime
<?php
class MyCalendar {
public $free = array();
public $booked = array();
public function __construct($week = 'now') {
$start = new DateTime($week);
$start->modify('Monday this week midnight');
$end = clone $start;
$end->modify('Friday this week midnight');
$interval = new DateInterval('P1D');
foreach (new DatePeriod($start, $interval, $end) as $freeTime) {
$this->free[] = $freeTime;
}
}
public function bookAppointment(DateTime $date, $note) {
$this->booked[] = array('date' => $date->modify('midnight'), 'note' => $note);
}
public function checkAvailability() {
return array_udiff($this->free, $this->booked, array($this, 'customCompare'));
}
public function customCompare($free, $booked) {
if (is_array($free)) $a = $free['date'];
else $a = $free;
if (is_array($booked)) $b = $booked['date'];
else $b = $booked;
if ($a == $b) {
return 0;
} elseif ($a > $b) {
return 1;
} else {
return -1;
}
}
}
// Создание календаря еженедельных встреч
$myCalendar = new MyCalendar;
// Запись некоторых еженедельных встреч
$myCalendar->bookAppointment(new DateTime('Monday this week'), "Уборка квартиры сотрудника Google.");
$myCalendar->bookAppointment(new DateTime('Wednesday this week'), "Катание на сноуборде.");
$myCalendar->bookAppointment(new DateTime('Friday this week'), "Борьба с багами в коде.");
// Проверка доступности дней путем сравнения дат в $booked с датами из $free
echo "Я доступен в следующие дни на этой неделе...\n\n";
foreach ($myCalendar->checkAvailability() as $free) {
echo $free->format('l'), "\n";
}
echo "\n\n";
echo "Я занят в следующие дни на этой неделе...\n\n";
foreach ($myCalendar->booked as $booked) {
echo $booked['date']->format('l'), ": ", $booked['note'], "\n";
}
?>
Результат выполнения данного примера:
Я доступен в следующие дни на этой неделе... Tuesday Thursday Я занят в следующие дни на этой неделе... Monday: Уборка квартиры сотрудника Google. Wednesday: Катание на сноуборде. Friday: Борьба с багами в коде.
Примечания
Замечание: Обратите внимание, что эта функция обрабатывает только одно измерение многомерного массива. Разумеется, вы можете обработать более одного измерения, используя
array_udiff($array1[0], $array2[0], "data_compare_func");
.
Смотрите также
- array_diff() - Вычислить расхождение массивов
- array_diff_assoc() - Вычисляет расхождение массивов с дополнительной проверкой индекса
- array_diff_uassoc() - Вычисляет расхождение массивов с дополнительной проверкой индекса, осуществляемой при помощи callback-функции
- array_udiff_assoc() - Вычисляет расхождение в массивах с дополнительной проверкой индексов, используя для сравнения значений callback-функцию
- array_udiff_uassoc() - Вычисляет расхождение в массивах с дополнительной проверкой индексов, используя для сравнения значений и индексов callback-функцию
- array_intersect() - Вычисляет схождение массивов
- array_intersect_assoc() - Вычисляет схождение массивов с дополнительной проверкой индекса
- array_uintersect() - Вычисляет пересечение массивов, используя для сравнения значений callback-функцию
- array_uintersect_assoc() - Вычисляет пересечение массивов с дополнительной проверкой индексов, используя для сравнения значений callback-функцию
- array_uintersect_uassoc() - Вычисляет пересечение массивов с дополнительной проверкой индекса, используя для сравнения индексов и значений индивидуальные callback-функции