数组中低于参考值的最接近值


Closest value of an array below a reference value

我有一个数组,其中包含带有相关"左"或"右"值的时间戳:

array (size=237)
  1421439428 => string 'left' (length=4)
  1421439411 => string 'right' (length=5)
  1421439392 => string 'left' (length=4)
  [here goes the example TS from below]
  1421439380 => string 'right' (length=5)
  1421439358 => string 'left' (length=4)
  1421439329 => string 'right' (length=5)
  1421439240 => string 'right' (length=5)
  1421439234 => string 'left' (length=4)

现在我想给出一个时间戳,例如1421439391(即是否在键中),我想知道最新的值是多少。在这种情况下,"正确"。即使它更接近左侧值,我也想知道下面的值!

这怎么可能(没有循环)?

带有循环(基于亚历克斯 W 链接的函数):

function closest($array, $number) {  
  foreach ($array as $key=>$val) {
    if ($key <= $number) return $val;
  }
  return end($array); // or return NULL;
}

显然,为了使其尽可能高效,您首先要按时间戳对数组进行排序。然后,您需要编写自己的closest函数,如下所示。

既然你说你不想

使用循环,这是你通常的做法,你必须为数组索引实现某种哈希函数,使数组按时间戳值排序。然后,您可以插入时间戳值(如果不存在),然后转到下一个数组索引。