我有一系列id' s和unix次
$array = Array(
[12] => 14235183200,
[8] => 1443045600,
[1] => 1417388400
);
和当前时间$curr_time = time();
。我需要检查哪一个最接近当前时间,然后获取最接近该值的数组的键。如果时间已过,那么当然这个值不应该计算(只有未来的日期很重要)。
min()
应该给出我比较值的最低值。但是如果我把当前日期,任何未来日期都更大,我得到当前日期。 array_search()
会给我我需要的钥匙。所以我需要这个:
$key = array_search($array, $min_date);
其中$min_date
是距离数组当前最近的日期。但是如何预检呢?我尝试了foreach($array as $value)
,但是当我尝试
foreach($array as $value){
}
任何测试都会失败,因为$ value是所有值组合的字符串。
答案 0 :(得分:1)
我们有2条基本规则;
$curr_time
)的内容$curr_time
)。这意味着我们可以做两个不同的逻辑位并得到我们的答案;
ASC
)$curr_time
,请将其排除
$curr_time
的是我们最接近的。
natsort($array); //Sort from lowest-highest
foreach($array as $k => $time) { //Loop through our array of times
if( $time < $time_to_look_for ) {
continue; //It's less than the time we need, so exclude it
} else {
//First entry that isn't less than the time we need
echo $k;
break;
}
}
答案 1 :(得分:1)
如果您要查找的值在数组中,则array_search函数最佳。因为您正在寻找可能不在数组中的最接近的值,所以array_search将不起作用。但是,编程起来相当简单。你需要经历每一个价值 - 所以你是正确的,因为你需要foreach。你需要保持你找到的最佳值的密钥,所以你需要一个我称之为$ key的变量。 &#34;最接近&#34;的概念有多个定义。我将它定义为abs($ cur_time- $ value)的最小结果。从那里,您的代码几乎是为您编写的:
注意:我更改了此代码,因为它被要求忽略过去的时间。我用continue语句做了这个,主要是因为这个例子现在展示了如何在foreach循环中使用continue和break。
$key = null; // I initialize it this way. You can do it a different way.
foreach($array as $k=>$v)
{
if($v<$cur_time) continue;
if($key == null) $key = $k; // The first item is closest by default.
elseif($v-$cur_time < $array[$key]-$cur_time)
$key = $k;
if($array[$key] == $cur_time) break;
}
当这结束时,$ key将具有与$ cur_time最接近的值的键。
我根据以下评论添加了休息时间。如果找到该值,则无需继续搜索。