回答編集履歴
1
コードにコメントを追加
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
|
-
|
55
|
+
$result + $arr2;
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
return $result;
|
46
60
|
|
47
61
|
}
|
48
62
|
|