回答編集履歴

8

追記

2016/08/26 14:55

投稿

mpyw
mpyw

スコア5223

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でも動くコードを追加

2016/08/26 14:55

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -1,4 +1,8 @@
1
- せっかくなのでPHPの関数を生かした短い別解を書いておきます **(PHP5.6以降で動作)**
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
- 蛇足: PHP5.4以降では`array()`よりも`[]`を使うべきです
89
+ - PHP5.4以降では`array()`よりも`[]`を使うべきです
90
+
91
+ - PHP5.6以降では`call_user_func_array()`よりも`...`を使うべきです
92
+
93
+

6

5\.4

2016/08/26 14:36

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -37,3 +37,7 @@
37
37
  var_dump($results);
38
38
 
39
39
  ```
40
+
41
+
42
+
43
+ 蛇足: PHP5.4以降では`array()`よりも`[]`を使うべきです

5

mistake

2016/08/26 14:27

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  function ($row) { return array_sum((array)$row); },
30
30
 
31
- array_merge_recursive($groups ? ...$groups : [])
31
+ $groups ? array_merge_recursive(...$groups) : []
32
32
 
33
33
  );
34
34
 

4

mistake

2016/08/26 14:26

投稿

mpyw
mpyw

スコア5223

test CHANGED
File without changes

3

version

2016/08/26 14:26

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -1,4 +1,4 @@
1
- せっかくなのでPHPの関数を生かした短い別解を書いておきます
1
+ せっかくなのでPHPの関数を生かした短い別解を書いておきます **(PHP5.6以降で動作)**
2
2
 
3
3
 
4
4
 

2

例外処理

2016/08/26 14:23

投稿

mpyw
mpyw

スコア5223

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

スペース

2016/08/26 14:23

投稿

mpyw
mpyw

スコア5223

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); },