我的数据库中有一个合格时间数组:
$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];
}
}
这应该能帮你:
$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开始时,我正在比较$aval_times[$I]和$aval_times[$I-1],所以我确实涵盖了$aval_imes[0]。
我不知道你在用$max=count($times)做什么。您从未定义$times。