回答編集履歴

2

空配列

2017/05/05 10:48

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -62,6 +62,10 @@
62
62
 
63
63
  var_dump(is_continuous_array([3 => 1, 2, 3, 4, 5])); // bool(false)
64
64
 
65
+ var_dump(is_continuous_array([])); // bool(false)
66
+
67
+ var_dump(is_continuous_array([3])); // bool(true) ←これってfalseのほうがいい?
68
+
65
69
  ```
66
70
 
67
71
 

1

厳密Ver

2017/05/05 10:48

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  {
16
16
 
17
- return range(reset($array), reset($array) + count($array) - 1) === $array;
17
+ return range($array[0], $array[0] + count($array) - 1) === $array;
18
18
 
19
19
  }
20
20
 
@@ -25,3 +25,43 @@
25
25
  var_dump(is_continuous_array([5, 6, 7, 9, 10])); // bool(false)
26
26
 
27
27
  ```
28
+
29
+
30
+
31
+ ----
32
+
33
+
34
+
35
+ もうちょっと厳密に判定するように書くと
36
+
37
+
38
+
39
+ ```php
40
+
41
+ function is_continuous_array(array $array)
42
+
43
+ {
44
+
45
+ return $array // 要素が1つ以上あるか
46
+
47
+ && array_filter($array, 'is_int') === $array // 整数以外のものを含んでいないか
48
+
49
+ && is_array(json_decode(json_encode($array))) // キーが0からの整数連番で連続しているか
50
+
51
+ && range($array[0], $array[0] + count($array) - 1) === $array; // 値が整数連番で連続しているか
52
+
53
+ }
54
+
55
+
56
+
57
+ var_dump(is_continuous_array([1, 2, 3, 4, 5])); // bool(true)
58
+
59
+ var_dump(is_continuous_array([5, 6, 7, 9, 10])); // bool(false)
60
+
61
+ var_dump(is_continuous_array([1, 2, [3], 4, 5])); // bool(false)
62
+
63
+ var_dump(is_continuous_array([3 => 1, 2, 3, 4, 5])); // bool(false)
64
+
65
+ ```
66
+
67
+