我有一个数组,其中包含带有相关"左"或"右"值的时间戳:
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
函数,如下所示。
使用循环,这是你通常的做法,你必须为数组索引实现某种哈希函数,使数组按时间戳值排序。然后,您可以插入时间戳值(如果不存在),然后转到下一个数组索引。