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


Compare php array values to a variable and return key

我有一个id和unix时间的数组

$array =  Array(
         [12] => 14235183200,
         [8] => 1443045600,
         [1] => 1417388400
     );

以及当前时间CCD_ 1。我需要检查其中哪一个最接近当前时间,然后获取最接近该值的数组键。如果时间已经过去,那么这个值当然不应该计算在内(只有未来的日期才重要)。

min()应该给我比较值中的最低值。但如果我输入当前日期,则任何未来日期都会更大,因此我得到当前日期。array_search()会给我我需要的钥匙。所以我需要这个:

$key = array_search($array, $min_date);

其中CCD_ 4是最接近阵列中的当前日期的日期。但是如何预成型支票呢?我尝试过foreach($array as $value),但当我尝试时

foreach($array as $value){
}

任何测试都会失败,因为$value是所有值的组合字符串。

我们有两个基本规则;

  • 任何低于时间($curr_time)的都被排除在外
  • 选择最接近时间的一个($curr_time

这意味着我们可以做两个不同的逻辑,得到我们的答案;

  • 从最小到最大对数组进行排序(排序为ASC
  • 如果时间小于$curr_time,则将其排除
    • 第一个不小于$curr_time = time();0的是我们最接近的

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

手动链接

  • natsort
  • 继续

如果您要查找的值在数组中,那么array_search函数是最好的。因为您正在寻找最接近的值,而该值可能不在数组中,所以array_search将不起作用。然而,这是相当简单的程序。你需要遍历每个值,所以你需要foreach,这是正确的。您需要维护您找到的最佳值的密钥,因此您需要一个变量,我将其称为$key。"最接近"的概念有不止一个定义。我将把它定义为来自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值最接近的键。

我根据下面的评论添加了一个休息时间。如果您找到了该值,则没有必要继续搜索。