2012-06-26 2 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 및 ranges와 가장 가까운 항목을 수행해 왔습니다. 하지만, 위와 일치하거나 위의 어떤 이유로 나는 최선의 방법을 볼 수 없다? 당신이 항목을 지나서 경우

+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; 
    } 
} 
관련 문제