連続であるかどうかを見る変数cnt
を用意して,以下のように実装することが可能です.
$ans = 0;
$cnt = 0;
foreach ($array as $arr) {
if ($arr) {
$cnt++;
} else {
$cnt = 0;
}
$ans = max($ans, $cnt);
}
echo $ans
またはif
文の中を三項演算子を用いて簡潔にして
$ans = 0;
$cnt = 0;
foreach ($array as $arr) {
$cnt = ($arr ? $cnt + 1 : 0);
$ans = max($ans, $cnt);
}
echo $ans
にしても良いと思います.
おまけ
もう少しこの問題を発展/拡張させると,ランレングス(Run Length)という情報を取得した上で,trueの最大のランレングスを取得したい.と言い換えることができます.
先述の$arrayを例にとってランレングスを求めると,
falseが1つ,trueが2つ,falseが1つ,trueが5つ,falseが1つ
となります.
ただの$array
[false, true, true, false, true, true, true, true, true, false]
ランレングス圧縮後
[[false, 1], [true, 2], [false, 1], [true, 5], [false, 1]]
このような情報を取得するアルゴリズムの名前をランレングス圧縮と言いますので,ぜひ調べてみたら良いと思います.