我现在有一个线路表 它有出发站id的 到达站id 出发时间 到达时间等字段,而且它的数据是依次存放的,例如线路1 从地点1到地点3那么数据库中有 1 1 2,2 2 3这样的数据 上一个到达站是下一个的出发站,现在我通过laravel获取前端传递的出发站和到达站,我需要找出地点4到地点1的最佳(到达时间最短)5条件线路
时间: 2023-12-14 12:38:34 浏览: 86
Laravel 中获取上一篇和下一篇数据
首先,你需要建立一个数据模型表示这个线路表,例如:
```php
class Route extends Model
{
protected $table = 'routes';
protected $fillable = [
'departure_station_id',
'arrival_station_id',
'departure_time',
'arrival_time'
];
}
```
然后,在控制器中,你可以写一个方法来处理前端传递的出发站和到达站,并找出地点4到地点1的最佳线路。假设你已经获取到了前端传递过来的出发站和到达站的id,可以使用 Laravel 的查询构建器来实现:
```php
public function findBestRoute($startStationId, $endStationId)
{
// 找出从出发站到达站的所有线路
$routes = Route::where('departure_station_id', $startStationId)
->where('arrival_station_id', $endStationId)
->get();
$bestRoute = null;
$shortestArrivalTime = null;
// 遍历所有线路,找出到达时间最短的线路
foreach ($routes as $route) {
// 找出从地点4到出发站的所有线路
$startRoutes = Route::where('arrival_station_id', $route->departure_station_id)
->where('departure_station_id', 4)
->get();
// 如果没有从地点4到出发站的线路,则跳过当前线路
if ($startRoutes->isEmpty()) {
continue;
}
// 找出到达时间最短的线路
foreach ($startRoutes as $startRoute) {
$arrivalTime = $startRoute->arrival_time + $route->arrival_time - $route->departure_time;
if ($shortestArrivalTime === null || $arrivalTime < $shortestArrivalTime) {
$bestRoute = [$startRoute, $route];
$shortestArrivalTime = $arrivalTime;
}
}
}
return $bestRoute;
}
```
这个方法会先找出从出发站到达站的所有线路,然后遍历这些线路,找出从地点4到出发站的所有线路,再遍历这些线路,计算到达时间最短的线路。最后,返回到达时间最短的线路数组,其中第一个元素是从地点4到出发站的线路,第二个元素是从出发站到达站的线路。
阅读全文