回答編集履歴
8
追記
test
CHANGED
@@ -91,3 +91,9 @@
|
|
91
91
|
- PHP5.6以降では`call_user_func_array()`よりも`...`を使うべきです
|
92
92
|
|
93
93
|
|
94
|
+
|
95
|
+
PHPは関数型言語ではないので,無理にforeachを排除してコールバック関数だらけにすると読みにくくてしょうがなくなったりするんですが,今回は組み込み関数が `array_merge_recursive` `array_sum` と2つも生かせるので,こういう場合には `array_map` を使うのもアリでしょう.
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
[初心者を戒めるPHP (そんなにarray_mapが書きたいか?) - Qiita](http://qiita.com/tadsan/items/fb496e450fc27c8c4494#%E3%81%9D%E3%82%93%E3%81%AA%E3%81%ABarray_map%E3%81%8C%E6%9B%B8%E3%81%8D%E3%81%9F%E3%81%84%E3%81%8B)
|
7
5\.3でも動くコードを追加
test
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
せっかくなのでPHPの関数を生かした短い別解を書いておきます
|
1
|
+
せっかくなのでPHPの関数を生かした短い別解を書いておきます
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
### PHP5.6以降で動作
|
2
6
|
|
3
7
|
|
4
8
|
|
@@ -40,4 +44,50 @@
|
|
40
44
|
|
41
45
|
|
42
46
|
|
47
|
+
### PHP5.3以降で動作
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
```php
|
52
|
+
|
53
|
+
<?php
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
$groups = array(
|
58
|
+
|
59
|
+
array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4),
|
60
|
+
|
61
|
+
array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8),
|
62
|
+
|
63
|
+
array('red' => 4, 'blue' => 6, 'yellow' => 7, 'cyan' => 8),
|
64
|
+
|
65
|
+
array('green' => 5, 'green' => 6, 'yellow' => 7, 'cyan' => 3),
|
66
|
+
|
67
|
+
array('green' => 5, 'blue' => 6, 'green' => 7, 'cyan' => 5),
|
68
|
+
|
69
|
+
);
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
$results = array_map(
|
74
|
+
|
75
|
+
function ($row) { return array_sum((array)$row); },
|
76
|
+
|
77
|
+
$groups ? call_user_func_array('array_merge_recursive', $groups) : array()
|
78
|
+
|
79
|
+
);
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
var_dump($results);
|
84
|
+
|
85
|
+
```
|
86
|
+
|
87
|
+
|
88
|
+
|
43
|
-
|
89
|
+
- PHP5.4以降では`array()`よりも`[]`を使うべきです
|
90
|
+
|
91
|
+
- PHP5.6以降では`call_user_func_array()`よりも`...`を使うべきです
|
92
|
+
|
93
|
+
|
6
5\.4
test
CHANGED
@@ -37,3 +37,7 @@
|
|
37
37
|
var_dump($results);
|
38
38
|
|
39
39
|
```
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
蛇足: PHP5.4以降では`array()`よりも`[]`を使うべきです
|
5
mistake
test
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
function ($row) { return array_sum((array)$row); },
|
30
30
|
|
31
|
-
array_merge_recursive(
|
31
|
+
$groups ? array_merge_recursive(...$groups) : []
|
32
32
|
|
33
33
|
);
|
34
34
|
|
4
mistake
test
CHANGED
File without changes
|
3
version
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
せっかくなのでPHPの関数を生かした短い別解を書いておきます
|
1
|
+
せっかくなのでPHPの関数を生かした短い別解を書いておきます **(PHP5.6以降で動作)**
|
2
2
|
|
3
3
|
|
4
4
|
|
2
例外処理
test
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
function ($row) { return array_sum((array)$row); },
|
30
30
|
|
31
|
-
array_merge_recursive(...$groups)
|
31
|
+
array_merge_recursive($groups ? ...$groups : [])
|
32
32
|
|
33
33
|
);
|
34
34
|
|
1
スペース
test
CHANGED
@@ -24,8 +24,6 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
-
|
28
|
-
|
29
27
|
$results = array_map(
|
30
28
|
|
31
29
|
function ($row) { return array_sum((array)$row); },
|