1, 'doctor_id' => 1, 'date' => '2026-03-06', 'period' => 'morning', // 只有上午 'status' => 1, 'quota' => 20 ] ]; echo "模拟排班数据:\n"; print_r($rosters); echo "\n"; // 模拟生成时间段的逻辑 $slots = []; foreach ($rosters as $roster) { if ($roster['status'] != 1) { echo "跳过非出诊排班: roster_id={$roster['id']}\n"; continue; } $periodValue = $roster['period']; echo "处理排班: roster_id={$roster['id']}, period={$periodValue}\n"; $startHour = null; $endHour = null; if ($periodValue == 1 || $periodValue === 'morning' || $periodValue === '上午') { $startHour = 9; $endHour = 12; echo " -> 识别为上午时段 (9:00-12:00)\n"; } elseif ($periodValue == 2 || $periodValue === 'afternoon' || $periodValue === '下午') { $startHour = 14; $endHour = 18; echo " -> 识别为下午时段 (14:00-18:00)\n"; } else { echo " -> 未知的时段值,跳过\n"; continue; } if ($startHour === null || $endHour === null) { echo " -> 错误:时段参数未设置\n"; continue; } // 生成15分钟间隔的时间段 for ($hour = $startHour; $hour < $endHour; $hour++) { for ($minute = 0; $minute < 60; $minute += 15) { $time = sprintf('%02d:%02d', $hour, $minute); $slots[] = [ 'time' => $time, 'available' => true, 'quota' => 1, 'period' => $periodValue ]; } } } echo "\n生成的时间段总数: " . count($slots) . "\n"; // 统计上午和下午的时间段 $morningCount = 0; $afternoonCount = 0; foreach ($slots as $slot) { if ($slot['time'] < '12:00') { $morningCount++; } elseif ($slot['time'] >= '14:00') { $afternoonCount++; } } echo "上午时间段数量: {$morningCount}\n"; echo "下午时间段数量: {$afternoonCount}\n"; echo "\n前5个时间段:\n"; foreach (array_slice($slots, 0, 5) as $slot) { echo " {$slot['time']} - period: {$slot['period']}\n"; } echo "\n后5个时间段:\n"; foreach (array_slice($slots, -5) as $slot) { echo " {$slot['time']} - period: {$slot['period']}\n"; } echo "\n预期结果:\n"; echo " - 总数应该是 12 (9:00-11:45, 每15分钟一个)\n"; echo " - 上午时间段: 12\n"; echo " - 下午时间段: 0\n"; echo " - 最后一个时间段应该是 11:45\n"; if (count($slots) == 12 && $morningCount == 12 && $afternoonCount == 0) { echo "\n✓ 测试通过!逻辑正确。\n"; } else { echo "\n✗ 测试失败!逻辑有问题。\n"; }