2016-10-17 11 views
1

値を取得する効率的な方法はありますか?キーの範囲はどこですか?例えば、 。私は、キーが13である値、または13を含むその配列内の任意の範囲を求めます。第2の要素の範囲が11-25であることがわかります。だから私はその価値を得るべきです。 11-25も13PHPは範囲の間にキーがある値を取得します

$array = array(
    '0-10' => 'a Value', 
    '11-25' => 'another Value', 
    '26-50' => 'value', 
    '51-100' => 'another string' 
); 
+0

ご迷惑をおかけして申し訳ありません。 –

+0

関数を見てくださいhttp://php.net/manual/en/function.array-slice.php –

+0

その配列のキーは範囲です。私は任意の番号を与えるでしょう。関数は、私が –

答えて

1

ここでは、あなたが何ができるかです:

function findInRange($number, $array) 
{ 
    foreach ($array as $key => $value) { 
     list($min, $max) = explode('-', $key); 

     if ($number >= $min && $number <= $max) { 
      return $value; 
     } 
    } 

    return null; 
} 

$number = 13; 
$array = [ 
    '0-10' => 'a Value', 
    '11-25' => 'another Value', 
    '26-50' => 'value', 
    '51-100' => 'another string' 
]; 

$result = findInRange($number, $array); 

var_dump($reesult); 
1

が含まれているためarray_mapexplode機能で、次のアプローチを使用することだろう最も簡単な方法:

$search_key = 13; 
$result = ''; 

foreach ($array as $k => $v) { 
    $range = array_map('intval', explode('-', $k)); 
    if ($search_key >= $range[0] && $search_key <= $range[1]) { 
     $result = $v; 
     break; 
    } 
} 

print_r($result); // "another Value" 
+0

に感謝のバディを望む範囲でそれを検索しますが、範囲に " - "で結合された2つの数字の代わりに数字だけがある場合は、範囲があります。 –

+0

oooops。申し訳ありませんが、私はx - xまたは13-13のような複雑なアルゴリズムを作ることができる1つの番号がある場合: –

0
$index = 13; 
$value = current(array_filter($array, 
    function($key) use ($index) { 
     if(!is_int(strpos('-', $key))){ 
      return $key == $index; 
     } 
     $range = explode('-', $key); 
     return ($index >= $range[0] && $index <= $range[1]); 
    }, ARRAY_FILTER_USE_KEY)); 
+0

:v –

関連する問題