我有一個壟斷遊戲進行中,我需要從給定的價值檢索最近的位置。我得到的最接近的可用位置是這樣的:陣列中最接近的數字,但在壟斷表
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;
}
我已經找到了解決方案,用於陣列得到最接近的值,但在目前的$ 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;
}
請注意,如果目前的$ 40 ==下面這事很遠,因爲壟斷都指向一個方向,1比接近40 39.
UPDATE:
我已經找到了解決辦法,感謝大家
function closest($search, $arr) {
$c = null;
sort($arr);
foreach($arr as $k) {
if($k > $search) { return $k; }
else {
if(!$c) $c = $k;
}
}
return $c;
}
所以在這個例子中,你是調用帶有$搜索= 40「最近的」功能$ ARR =(6,16,26,36),你希望它返回6 ? – imran 2013-04-10 04:40:21
這是一個動態數組,但是在這個例子中,我想返回6.如果我有$ search = 35,那麼接下來是36.如果$ search = 37,接下來是6 – 2013-04-10 05:15:11