質問: $hoge; array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } array(5) { [0]=> int(3) [1]=> int(4) [2]=> int(5) [3]=> int(6) [4]=> int(7) } いくつかある配列の中から、このように値が1,2,3,4,5や2,3,4,5,6と連続している配列を判定したいです。 中には3,6,7,8,9と続いていないものもあります。(4つ続いていたらそれはそれで判定したい) こういったことは可能なのでしょうか? いくつかarrayの関数をみたのですが、そのような操作に対応する関数がないように見えて、困っています。
回答: * 配列要素はすべて整数 * 配列要素数は必ず1以上 という制約があれば,以下のようなシンプルな関数でチェックできます。 ``` function is_continuous_array(array $array) { return range($array[0], $array[0] + count($array) - 1) === $array; } var_dump(is_continuous_array([1, 2, 3, 4, 5])); // bool(true) var_dump(is_continuous_array([5, 6, 7, 9, 10])); // bool(false) ``` もうちょっと厳密に判定するように書くと ``` function is_continuous_array(array $array) { return $array // 要素が1つ以上あるか && array_filter($array, 'is_int') === $array // 整数以外のものを含んでいないか && is_array(json_decode(json_encode($array))) // キーが0からの整数連番で連続しているか && range($array[0], $array[0] + count($array) - 1) === $array; // 値が整数連番で連続しているか } var_dump(is_continuous_array([1, 2, 3, 4, 5])); // bool(true) var_dump(is_continuous_array([5, 6, 7, 9, 10])); // bool(false) var_dump(is_continuous_array([1, 2, [3], 4, 5])); // bool(false) var_dump(is_continuous_array([3 => 1, 2, 3, 4, 5])); // bool(false) var_dump(is_continuous_array([])); // bool(false) var_dump(is_continuous_array([3])); // bool(true) ←これってfalseのほうがいい? ```