array_udiff Вычисляет расхождение массивов, используя для сравнения callback-функцию &reftitle.description; arrayarray_udiff arrayarray arrayarrays callablevalue_compare_func Вычисляет расхождение массивов, используя для сравнения данных callback-функцию. Поведение этой функции отличается от поведения функции array_diff, которая сравнивает данные через внутреннюю функцию. &reftitle.parameters; array Первый массив. arrays Массивы для сравнения. value_compare_func &sort.callback.description; &sort.callback.description.presort; &reftitle.returnvalues; Возвращает массив (array), содержащий элементы аргумента array, которых нет ни в одном другом аргументе. &reftitle.examples; Пример использования функции <function>array_udiff</function> с объектами класса stdClass 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')); ?> ]]> &example.outputs; stdClass Object ( [width] => 11 [height] => 3 ) [1] => stdClass Object ( [width] => 7 [height] => 1 ) ) ]]> Пример использования функции <function>array_udiff</function> с объектами класса DateTime 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"; } ?> ]]> &example.outputs; &reftitle.notes; Обратите внимание, что функция обрабатывает только первый уровень многомерного массива. Значения на вложенных уровнях обрабатывают, например, так: array_udiff($array1[0], $array2[0], "data_compare_func");. &reftitle.seealso; array_diff array_diff_assoc array_diff_uassoc array_udiff_assoc array_udiff_uassoc array_intersect array_intersect_assoc array_uintersect array_uintersect_assoc array_uintersect_uassoc