将php数组值与变量和返回键进行比较

时间:2015-03-18 13:01:49

标签: php arrays

我有一系列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是所有值组合的字符串。

2 个答案:

答案 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;
   }
}

https://eval.in/301601

手动链接;

答案 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最接近的值的键。

我根据以下评论添加了休息时间。如果找到该值,则无需继续搜索。