如何连续检查数组?

时间:2011-05-31 19:08:23

标签: php arrays

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

$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];
    }
}

1 个答案:

答案 0 :(得分:0)

这应该是你:

$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。