2012-06-26 65 views
0

我有一個嵌套的數組與有效號碼=>數據精確值或值: -PHP - 上面找到從陣列

$validData = array(array(1 => 'one data'),array(5 => '5 data'),array(15 => '15 data'),array(30 => 'thirty data')); 

讓說我有查詢值,$查詢= 14;

我想先檢查是否有14個,如果不是那麼就去上面最近的選項。

我一直在做與max,array_keys和範圍最近的項目。但是,由於某種原因,匹配或超出上限,我看不到最好的方式?

+0

排序數組,遍歷數組想起了以前的項目,如果你過去的項目,使用以前項... – deceze

+0

或者,環通過數組*反轉*,並在您使用key($ item)<= $ query'找到一個項目時停止。 – Jon

回答

1
// in case your array keys are already sorted 
$prevKey = key(current($validData)); 
foreach($validData as $data) { 
    $currentKey = key($data); 
    if ($currentKey == $query) { 
     // found ! 
     echo $currentKey; 
     break; 
    } 
    else if ($currentKey > $query) { 
     echo $currentKey;  
     break; 
    } 
    $prevKey = $currentKey; 
} 
+1

抱歉沒有注意到最近的選項。只是修復它。 – antoniom

1

假設數組進行排序

$query = 14; 
$arrayThatWeWant = null; 
foreach ($validData as $index=>$vdSubRay) 
{ 
    $ak = key($vsSubRay); 
    if ($ak == $query) 
    { 
     $arrayThatWeWant = $vdSubRay; 
     break; 
    } 
    else if ($ak > $query) 
    { 
     $arrayThatWeWant = $validData[$index-1]; 
     break; 
    } 
}