0

有効な数値を持つネストされた配列があります=>データ:-

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

クエリ値があるとしましょう、$ query = 14;

最初に14があるかどうかを確認したいのですが、ない場合は、上記の最も近いオプションに移動します。

max、array_keys、rangesで最も近い項目を実行しています。しかし、何らかの理由で一致または上に行くと、最善の方法がわかりませんか?

4

2 に答える 2

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;
}
于 2012-06-26T11:21:24.070 に答える
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;
    }
}
于 2012-06-26T11:18:42.740 に答える