PHP 中一系列位置之间的总距离

Total distance between series of locations in PHP

我已经在使用半正弦公式来计算两点之间的距离。

我现在要做的是计算一系列位置之间的距离。

1 -> 2 -> 3 -> 4

我已经能够像这样调用函数了

$travelled = 0;
foreach ($this->book->locations as $key => $location) {
    $travelled += Book::getDistance($location, $this->book->locations[$key + 1]);
}

但显然我 运行 遇到了问题,当我在最后一个位置时,$locations[$key + 1] 是一个无效索引。我怀疑正确的方法是 reduce locations 使用 carrys 到下一次执行的距离的函数,但我不知道如何将“下一个”项目传递给reduce 函数,比如....

$this->locations->reduce(function ($sum, $location) use ($nextLocation) {
    return $sum + Book::getDistance($location, $nextLocation);
}, 0);

这是一个快速简单的解决方案,但您可以在 foreach 中放置一个 if 语句来阻止索引导致错误,例如:

$travelled = 0;
$numLocations = $this->book->locations->count();

foreach ($this->book->locations as $key => $location) {
    if ($key === $numLocations - 1) {
        break;
    }

    $travelled += Book::getDistance($location, $this->book->locations[$key + 1]);
}