Efficient algorithm for merging multiple multidimensional array values
For example
$a = Array (
Array
' Province ' = ' ss ',
' Package ' = = Array (
Array
' FX58 ' =>0,
' PName ' = ' a '
),
),
' StoreName ' = ' test ',
),
Array
' Province ' = ' cc ',
' Package ' = = Array (
Array
' FX58 ' =>1,
' PName ' = ' B '
),
),
' StoreName ' = ' test2 ',
)
);
$b = Array (
Array
' Province ' = ' ss ',
' Package ' = = Array (
Array
' FX58 ' =>1,
' PName ' = ' a '
),
),
' StoreName ' = ' test ',
),
Array
' Province ' = ' cc ',
' Package ' = = Array (
Array
' FX58 ' =>2,
' PName ' = ' B '
),
),
' StoreName ' = ' test2 ',
)
);
To count the B array values in the A array
------to solve the idea----------------------
$a = Array (
Array
' Province ' = ' ss ',
' Package ' = = Array (
Array
' FX58 ' =>0,
' PName ' = ' a '
),
),
' StoreName ' = ' test ',
),
Array
' Province ' = ' cc ',
' Package ' = = Array (
Array
' FX58 ' =>1,
' PName ' = ' B '
),
),
' StoreName ' = ' test2 ',
)
);
$b = Array (
Array
' Province ' = ' ss ',
' Package ' = = Array (
Array
' FX58 ' =>1,
' PName ' = ' a '
),
),
' StoreName ' = ' test ',
),
Array
' Province ' = ' cc ',
' Package ' = = Array (
Array
' FX58 ' =>2,
' PName ' = ' B '
),
),
' StoreName ' = ' test2 ',
)
);
foreach ($a as $v) {
foreach ($v [' package '] as $t) {
$res [$v [' Province ']][$v [' storeName ']][$t [' PName ']] = $t [' FX58 '];
}
}
foreach ($b as & $v) {
foreach ($v [' package '] as $t) {
$res [$v [' Province ']][$v [' storeName ']][$t [' PName ']] + = $t [' FX58 '];
}
}
foreach ($a as & $v) {
foreach ($v [' Package '] as & $t) {
$t [' FX58 '] = $res [$v [' Province ']][$v [' storeName ']][$t [' PName '];
}
}
Print_r ($a);
Array
(
[0] = = Array
(
[Province] = ss
[Package] = Array
(
[0] = = Array
(
[FX58] = 1
[PName] = a
)
)
[StoreName] = Test
)
[1] = = Array
(
[Province] = cc
[Package] = Array
(
[0] = = Array
(
[FX58] = 3
[PName] = b
)
)
[StoreName] = Test2
)
)
------to solve the idea----------------------
$a = Array (
Array
' Province ' = ' ss ',
' Package ' = = Array (
Array
' FX58 ' =>0,
' PName ' = ' a '
),
),
' StoreName ' = ' test ',
),
Array
' Province ' = ' cc ',
' Package ' = = Array (
Array
' FX58 ' =>1,
' PName ' = ' B '
),
),
' StoreName ' = ' test2 ',
)
);
$b = Array (
Array
' Province ' = ' ss ',
' Package ' = = Array (
Array
' FX58 ' =>1,
' PName ' = ' a '
),
),
' StoreName ' = ' test ',
),
Array
' Province ' = ' cc ',
' Package ' = = Array (
Array
' FX58 ' =>2,
' PName ' = ' B '
),
),
' StoreName ' = ' test2 ',
)
);
foreach ($b as $k = = $v) {
For ($i =0, $len =count ($a), $i < $len; $i + +) {
if ($a [$i] [' province '] = = $v [' Province '] && $a [$i] ' package '][0][' PName ']== $v [' Package '][0][' PName '] & & $a [$i] [' StoreName ']== $v [' storeName ']) {
$a [$i] [' Package '][0][' FX58 '] + = $v [' package '][0][' FX58 '];
}
}
}
Echo '';
Print_r ($a);
Echo '
';
Array
(
[0] = = Array
(
[Province] = ss
[Package] = Array
(
[0] = = Array
(
[FX58] = 1
[PName] = a
)
)
[StoreName] = Test
)
[1] = = Array
(
[Province] = cc
[Package] = Array
(
[0] = = Array
(
[FX58] = 3
[PName] = b
)
)
[StoreName] = Test2
)
)