【问题标题】:How can I check an array for consecutive times?如何连续检查数组?
【发布时间】:2011-05-31 19:08:22
【问题描述】:

我的数据库中有一组合格的时间:

$avail_times = array("9","11","12","13","15","16","17","18");

如果存在,我想显示 4 个连续的值,如果不存在,我想继续。例如,在上面的数组中,只有 15、16、17 和 18 有四个连续数字正确地跟在前一个数字之后

想法?

这可能是一个重复的问题,但我还没有找到解决方案。我的情况有点不同。我只需要显示连续四次或更多次的那些数字。这是我想出的,但它不能正常工作:

$avail_times = array("9","10","11","13","14","15","16","17","19","20","21","22");

for($i=1, $max = count($times) + 4; $i < $max; $i++)
{
    if ($avail_times[$i] == $avail_times[$i + 1] - 1)
    {
        echo $avail_times[$i];
    }
}

【问题讨论】:

  • 闻起来像家庭作业...弄清楚,穿过阵列跟踪您所在的位置。如果您无法手动解决此问题,则需要继续尝试。
  • 为什么会受到如此多的负面关注?这是一个合法的问题。
  • 好吧,我已经为你提供了解决方案,但主题已关闭。

标签: php arrays


【解决方案1】:

你应该这样做:

$avail_times = array("9","10","11","13","14","15","16","17","19","20","21","22");

$consec_nums = 1;
for($i = 1; $i <count($avail_times); $i++) {
    if($avail_times[$i] == ($avail_times[$i - 1] + 1)) {
        $consec_nums++;
        if($consec_nums == 4) break;
    }
    else {
        $consec_nums = 1;
    }
}
if($consec_nums == 4) {
    echo "found: {$avail_times[$i-3]}, {$avail_times[$i-2]}, {$avail_times[$i-1]}, {$avail_times[$i]}\n";
}

还有一些注意事项:

  1. 数组索引从 0 开始,当您的 for 循环以 $i = 1 开始时,您将跳过第一个元素。请注意,虽然我从 $i=1 开始,但我正在比较 $avail_times[$i] 和 $avail_times[$i-1],所以我确实涵盖了 $avail_times[0]。

  2. 我不知道你在用 $max = count($times) 做什么。你永远不会定义 $times。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 2022-11-22
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 2016-01-03
    • 2013-08-02
    • 1970-01-01
    相关资源
    最近更新 更多