2 つの単純な配列を考えてみましょう。
<?php
$array1 = array(
'blue' => 5,
'green' => array(
'square' => 10,
'sphere' => 0.5,
'triangle' => 3
),
'red' => array(
'circle' => 1000,
),
'black' => 4,
);
$array2 = array(
'blue' => 1,
'green' => array(
'square' => 11,
'circle' => 5,
),
'purple' => 10,
'yellow' => array(
'triangle' => 4
),
'black' => array(
'circle' => 6,
),
);
各との各値を再帰的に数学的に加算する必要があります。$array1
$array2
- キーを保持する
- キーが に存在しないが に
$array1
存在する$array2
場合、最終的な配列には単に の値が含まれます$array2
(その逆も同様です)。 - 両方に存在する場合、数値が追加されます
+
- 数値以外の値は変更されません
- 上の値
$array1
が別のサブ配列を$array2
指し、その中の値を指している場合、終了値は$array1
、親の名前とその値を使用して、からの値と新しいキー/値を含むサブ配列を含むキーになります (black
例では) - 事実上無制限のネスティングで動作できるはずです
明確にするために、例えば、私たちが言った場合
<?php
$final = array_merge_special($array1, $array2);
// We would end up with, if you var_export()'d final, something like:
// (Note: Hope I didn't make mistakes in this or it will be confusing,
// so expect mild human error)
$final = array(
'blue' => 6, // 5+1
'green' => array(
'square' => 21, // (10+11)
'sphere' => 0.5, // only in $array1
'triangle' => 3 // only in $array1
'circle' => 5, // only in $array2
),
'purple' => 10, // only in $array2
'yellow' => array( // only in $array2
'triangle' => 4
),
'red' => array( // only in $array1
'circle' => 1000,
),
'black' => array(
'circle' => 6, // untouched, while $black is present in both, the $array1 value does not have a 'circle' key, and is actually only a key/value (see below)
'black' => 4, // the key/value from $array1 that was not a subarray, even though it was a subarray in $array2
),
);
これはとてつもなく気が遠くなるような気がします。1 つの配列をループして値を簡単に再帰的に追加できることはわかっていますが、これは (ある程度) 機能していblack
ますが、壊れたコードがどのようになるか想像さえできない特別なルール ( のルールなど)に入ったときです。見る。これを行うには、各配列を個別にループしてunset()
値をマージする方法が必要ですか?