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

回答編集履歴

8

追記

2016/08/26 14:55

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -44,3 +44,7 @@
44
44
 
45
45
  - PHP5.4以降では`array()`よりも`[]`を使うべきです
46
46
  - PHP5.6以降では`call_user_func_array()`よりも`...`を使うべきです
47
+
48
+ PHPは関数型言語ではないので,無理にforeachを排除してコールバック関数だらけにすると読みにくくてしょうがなくなったりするんですが,今回は組み込み関数が `array_merge_recursive` `array_sum` と2つも生かせるので,こういう場合には `array_map` を使うのもアリでしょう.
49
+
50
+ [初心者を戒める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

answer CHANGED
@@ -1,5 +1,7 @@
1
- せっかくなのでPHPの関数を生かした短い別解を書いておきます **(PHP5.6以降で動作)**
1
+ せっかくなのでPHPの関数を生かした短い別解を書いておきます
2
2
 
3
+ ### PHP5.6以降で動作
4
+
3
5
  ```php
4
6
  <?php
5
7
 
@@ -19,4 +21,26 @@
19
21
  var_dump($results);
20
22
  ```
21
23
 
24
+ ### PHP5.3以降で動作
25
+
26
+ ```php
27
+ <?php
28
+
29
+ $groups = array(
30
+ array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4),
31
+ array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8),
32
+ array('red' => 4, 'blue' => 6, 'yellow' => 7, 'cyan' => 8),
33
+ array('green' => 5, 'green' => 6, 'yellow' => 7, 'cyan' => 3),
34
+ array('green' => 5, 'blue' => 6, 'green' => 7, 'cyan' => 5),
35
+ );
36
+
37
+ $results = array_map(
38
+ function ($row) { return array_sum((array)$row); },
39
+ $groups ? call_user_func_array('array_merge_recursive', $groups) : array()
40
+ );
41
+
42
+ var_dump($results);
43
+ ```
44
+
22
- 蛇足: PHP5.4以降では`array()`よりも`[]`を使うべきです
45
+ - PHP5.4以降では`array()`よりも`[]`を使うべきです
46
+ - PHP5.6以降では`call_user_func_array()`よりも`...`を使うべきです

6

5\.4

2016/08/26 14:36

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -17,4 +17,6 @@
17
17
  );
18
18
 
19
19
  var_dump($results);
20
- ```
20
+ ```
21
+
22
+ 蛇足: PHP5.4以降では`array()`よりも`[]`を使うべきです

5

mistake

2016/08/26 14:27

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  $results = array_map(
15
15
  function ($row) { return array_sum((array)$row); },
16
- array_merge_recursive($groups ? ...$groups : [])
16
+ $groups ? array_merge_recursive(...$groups) : []
17
17
  );
18
18
 
19
19
  var_dump($results);

4

mistake

2016/08/26 14:26

投稿

mpyw
mpyw

スコア5223

answer CHANGED
File without changes

3

version

2016/08/26 14:26

投稿

mpyw
mpyw

スコア5223

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

2

例外処理

2016/08/26 14:23

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  $results = array_map(
15
15
  function ($row) { return array_sum((array)$row); },
16
- array_merge_recursive(...$groups)
16
+ array_merge_recursive($groups ? ...$groups : [])
17
17
  );
18
18
 
19
19
  var_dump($results);

1

スペース

2016/08/26 14:23

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -11,7 +11,6 @@
11
11
  ['green' => 5, 'blue' => 6, 'green' => 7, 'cyan' => 5],
12
12
  ];
13
13
 
14
-
15
14
  $results = array_map(
16
15
  function ($row) { return array_sum((array)$row); },
17
16
  array_merge_recursive(...$groups)