如何连续检查阵列?

问题描述

| 我的数据库中有一系列合格时间:
$avail_times = array(\"9\",\"11\",\"12\",\"13\",\"15\",\"16\",\"17\",\"18\");
我想显示4个连续值(如果存在),否则,我想继续。例如,在上面的数组中,只有四个连续的数字正确地跟在前一个之后的唯一位置是15,16,17和18 有什么想法吗? 这可能是一个重复的问题,但是我没有找到解决方案。我的情况有些不同。我只需要显示连续四次或更多次的数字即可。这是我想出的,但是不能正常工作:
$avail_times = array(\"9\",\"10\",\"14\",\"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];
    }
}
    

解决方法

        您应该这样做:
$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\";
}
和一些注意事项: 数组索引从0开始,当for循环从$ i = 1开始时,您将跳过第一个元素。请注意,虽然我从$ i = 1开始,但是我正在比较$ avail_times [$ i]和$ avail_times [$ i-1],因此我确实涵盖了$ avail_times [0]。 我不知道您在用$ max = count($ times)做什么。您永远不会定义$ times。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...