質問するログイン新規登録

回答編集履歴

2

空配列

2017/05/05 10:48

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -30,4 +30,6 @@
30
30
  var_dump(is_continuous_array([5, 6, 7, 9, 10])); // bool(false)
31
31
  var_dump(is_continuous_array([1, 2, [3], 4, 5])); // bool(false)
32
32
  var_dump(is_continuous_array([3 => 1, 2, 3, 4, 5])); // bool(false)
33
+ var_dump(is_continuous_array([])); // bool(false)
34
+ var_dump(is_continuous_array([3])); // bool(true) ←これってfalseのほうがいい?
33
35
  ```

1

厳密Ver

2017/05/05 10:48

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -6,9 +6,28 @@
6
6
  ```php
7
7
  function is_continuous_array(array $array)
8
8
  {
9
- return range(reset($array), reset($array) + count($array) - 1) === $array;
9
+ return range($array[0], $array[0] + count($array) - 1) === $array;
10
10
  }
11
11
 
12
12
  var_dump(is_continuous_array([1, 2, 3, 4, 5])); // bool(true)
13
13
  var_dump(is_continuous_array([5, 6, 7, 9, 10])); // bool(false)
14
- ```
14
+ ```
15
+
16
+ ----
17
+
18
+ もうちょっと厳密に判定するように書くと
19
+
20
+ ```php
21
+ function is_continuous_array(array $array)
22
+ {
23
+ return $array // 要素が1つ以上あるか
24
+ && array_filter($array, 'is_int') === $array // 整数以外のものを含んでいないか
25
+ && is_array(json_decode(json_encode($array))) // キーが0からの整数連番で連続しているか
26
+ && range($array[0], $array[0] + count($array) - 1) === $array; // 値が整数連番で連続しているか
27
+ }
28
+
29
+ var_dump(is_continuous_array([1, 2, 3, 4, 5])); // bool(true)
30
+ var_dump(is_continuous_array([5, 6, 7, 9, 10])); // bool(false)
31
+ var_dump(is_continuous_array([1, 2, [3], 4, 5])); // bool(false)
32
+ var_dump(is_continuous_array([3 => 1, 2, 3, 4, 5])); // bool(false)
33
+ ```