我有一个包含相关“左”或“右”值的时间戳的数组:
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(那是或不在键中)我想知道,最近的值是多少。在这种情况下“正确”。即使它更接近左边值我想知道下面的值!
这怎么可能(没有循环)?
使用循环(基于Alex W链接的功能):
function closest($array, $number) {
foreach ($array as $key=>$val) {
if ($key <= $number) return $val;
}
return end($array); // or return NULL;
}
答案 0 :(得分:1)
显然,为了使其尽可能高效,您首先要按时间戳对数组进行排序。然后,您需要编写自己的closest
函数,例如this one。
由于你说你不想使用循环,这是你通常会这样做的,你必须为数组索引实现某种散列函数,使数组按顺序排序时间戳值。然后,您可以插入时间戳值(如果它不存在),然后转到下一个数组索引。