2012-06-20 2 views
0

У меня есть 3 массивов, один имеет низкий вес значения, другие весы высокого значения, третье: фактическое значение этого вес «кронштейн»:возврат ключа из массива путем сравнения значений

Array 1 
(
    [0] => 0.00 
    [1] => 2.00 
    [2] => 5.00 
    [3] => 20.00 
    [4] => 50.00 
    [5] => 100.00 
) 
Array 2 
(
    [0] => 1.90 
    [1] => 4.90 
    [2] => 20.00 
    [3] => 50.00 
    [4] => 100.00 
) 
Array 3 
(
    [0] => 30 
    [1] => 50 
    [2] => 100 
    [3] => 200 
    [4] => 500 
    [5] => 1000 
) 

Мне нужно найдите соответствующий КЛЮЧ из массива 3, где мое значение (скажем, 5.30) больше значения в массиве 1, но меньше его соответствующего значения в массиве 2 (больше 5, но меньше 20). Результат этого примера приведет к выводу ключа массива из [2] из Array 3 и значения 100.

Я мог бы прокручивать каждый массив и находить ключи, но Im надеется, что есть более быстрый способ сделать это, по каким-то объединение массивов:

[2] => 
     [0] => 5.00 
     [1] => 20.00 
     [2] => 100 

... а затем, видя, если мое значение между [0] и [1], если это вернуть [2] в основном [2] [0] является 'от' вес, [2] [1] - это «вес», а значение для этой «скобки» - [2] [2].

Merged массив, используя пример кода:

Array 
(
    [0] => Array 
     (
      [0] => 0.00 
      [1] => 1.90 
      [2] => 30 
     ) 

    [1] => Array 
     (
      [0] => 2.00 
      [1] => 4.90 
      [2] => 50 
     ) 

    [2] => Array 
     (
      [0] => 5.00 
      [1] => 20.00 
      [2] => 100 
     ) 

    [3] => Array 
     (
      [0] => 20.00 
      [1] => 50.00 
      [2] => 200 
     ) 

    [4] => Array 
     (
      [0] => 50.00 
      [1] => 100.00 
      [2] => 500 
     ) 

    [5] => Array 
     (
      [0] => 100.00 
      [1] => 
      [2] => 100 
     ) 

) 

ответ

1

Было бы намного проще, если ваш ввод данных не был структурирован таким неудачным образом.

Во всяком случае, если вы хотите сделать это быстро то соответствующее решение, вероятно, ручной перекручивание:

// possibly add some error checking 
foreach($lows as $i => $low) { 
    if ($value >= $low && isset($highs[$i]) && $value <= $highs[$i]) { 
     return $values[$i]; 
    } 
} 

Чтобы сделать то, что вы просите (объединить массивы), вы можете использовать array_map:

$merged = array_map(
      function($low, $high = null, $value) { 
       return func_get_args(); 
      }, 
      $lows, $highs, $values); 

И потом:

foreach($bands as $band) { 
    if($value >= $band[0] && $band[1] && $value <= $band[1]) { 
     return $band[2]; 
    } 
} 
+0

Что бы n идеальная структура для этого примера? – Innate

+0

@Innate: Что-то вроде того, что вы хотите сделать в конце :) – Jon

+0

Я предполагаю, что меняет мой вопрос, а затем, с новым массивом, каким будет самый быстрый способ вернуть значение? – Innate

Смежные вопросы