Цель этого приложения - запланировать максимально возможное количество большого количества машин в магазине. Процесс рекурсивный, сбор графики и измерение эффективности. Это работает, но требуется буквально несколько дней для запуска. Значительная утечка времени блокового кода ниже:Эффективность во время итерации дат в PHP
foreach($machines AS $machine) {
# To begin, we analyze the schedule thus far to get this machine's existing schedule.
$machSched = array();
foreach($schedule AS $booking) {
if($booking['mach']==$machine && strtotime($booking['end']) > date('U')) {
$machSched[] = $booking;
}
}
# We seek the next time the machine can be booked. We begin by sorting its current bookings.
aasort($machSched, 'start');
# Now we construct the list of available times
$lastEnd = date('U');
$freeTimes=array();
foreach($machSched AS $booking) {
if(strtotime($booking['start']) > $lastEnd) $freeTimes[] = array('start' => $lastEnd, 'end' => strtotime($booking['start']));
$lastEnd = strtotime($booking['end']);
}
$freeTimes[] = array('start' => $lastEnd, 'end' => strtotime('2030-12-31'));
# Now we go through each available timeslot to see what we can book.
foreach($freeTimes AS $slot) {
// Scheduling stuff here...
}
}
Этого блок перебирает существующие расписанию для каждой машины, сортирует их и создает массив «свободных слоты» (время между существующим запланированными элементами я. оптимизировал и оптимизировал эту программу, но я не могу придумать лучший способ сделать эту маленькую часть. Обратите внимание, что aasort - это функция для сортировки массива ассоциативных массивов с помощью ключа в ассоциативных массивах.
Любая помощь будет принята с благодарностью
Кэширование этих констант оказалось весьма ценным. Я думаю, что я тратил слишком много времени, пытаясь найти более эффективный общий алгоритм и не хватало времени на то, что у меня было быстрее. – user1412922
Я могу только изобразить, что ** aasort ($ machSched, 'start') **, но если start уникален для $ machine, вы можете $ machSched [$ start] = $ booking; и использовать ksort –