我正在进行一场垄断游戏,我需要从给定值中检索最近的位置。我得到这样的最近位置:
function Field_GetNearestByCategory($current,$category) {
$current = (int)$current;
$category = SQLEscape($category);
$s = "SELECT ID,Location FROM `card` WHERE Category='$category' AND Location <> $current";
$qr = SQLQuery($s);
$locs = array();
while($r = SQLGetArray($qr)) {
$locs[] = $r[1];
}
return $locs;
}
我找到了获取数组中最接近值的解决方案,但是当 $current == 40 并且下一个最接近的字段应该是 6 时会出现问题(假设我们想去最近的铁路)。
function closest($search, $arr)
{
$closest = null;
foreach($arr as $item)
{
if($closest == null || abs($search - $closest) > abs($item - $search))
{
$closest = $item;
}
}
return $closest;
}
请注意,如果 $current == 40,则低于它的任何东西都相距甚远,因为 Monopoly 朝一个方向发展,因此 1 比 39 更接近 40。
更新:
我找到了解决办法,谢谢大家
function closest($search, $arr) {
$c = null;
sort($arr);
foreach($arr as $k) {
if($k > $search) { return $k; }
else {
if(!$c) $c = $k;
}
}
return $c;
}