回答編集履歴

1

コードにコメントを追加

2017/02/26 15:42

投稿

miyahan
miyahan

スコア3095

test CHANGED
@@ -1,8 +1,8 @@
1
- 複数の配列をマージする際に値を上書きするのではなく合算させたいということでしょうか?
1
+ 複数の配列をマージする際に値を**上書き**するのではなく**合算**させたいということでしょうか?
2
2
 
3
3
 
4
4
 
5
- PHPには配列を操作する関数が数多く用意されていますが、残念ながら目的機能は見つかりませんでした。というわけで自前でやるしかないと思います。不格好ですが思いついたアイディアを示します。
5
+ PHPには配列を操作する関数が数多く用意されていますが、残念ながら目的機能は見つかりませんでした。というわけで自前でやるしかないと思います。不格好ですが思いついたアイディアを示します。
6
6
 
7
7
 
8
8
 
@@ -20,13 +20,19 @@
20
20
 
21
21
  if (is_array($arr1[$key]) && is_array($arr2[$key])) {
22
22
 
23
+ // 値がどちらも配列の場合は再帰的にマージする
24
+
23
25
  $result[$key] = array_merge_sum($arr1[$key], $arr2[$key]);
24
26
 
25
27
  } elseif ((is_int($arr1[$key]) || is_float($arr1[$key])) && (is_int($arr2[$key]) || is_float($arr2[$key]))) {
26
28
 
29
+ // 値がどちらも数値(int or float)の場合は加算する
30
+
27
31
  $result[$key] = $arr1[$key] + $arr2[$key];
28
32
 
29
33
  } else {
34
+
35
+ // 値が配列・数値以外、もくしは型が合わない場合は例外を投げる
30
36
 
31
37
  throw new \Exception('Value is must be Integer, Float or Array');
32
38
 
@@ -36,13 +42,21 @@
36
42
 
37
43
  } else {
38
44
 
45
+ // $arr1 にしかないキーはそのまま代入
46
+
39
47
  $result[$key] = $val;
40
48
 
41
49
  }
42
50
 
43
51
  }
44
52
 
53
+ // $arr2 にしかないキーはそのまま代入
54
+
45
- return $result + $arr2;
55
+ $result + $arr2;
56
+
57
+
58
+
59
+ return $result;
46
60
 
47
61
  }
48
62