在交叉它们时合并两个多维数组并对值求和

时间:2018-03-23 16:04:27

标签: php arrays sorting multidimensional-array

我有两个多维数组。这些是 -

Array
(
    [Fortitude] => Array
        (
            [library_count] => 0
            [crypt_count] => 7
        )

    [Obtenebration] => Array
        (
            [library_count] => 6
            [crypt_count] => 11
        )

    [Dementation] => Array
        (
            [library_count] => 1
            [crypt_count] => 0
        )

    [Obfuscate] => Array
        (
            [library_count] => 0
            [crypt_count] => 2
        )

    [Necromancy] => Array
        (
            [library_count] => 9
            [crypt_count] => 2
        )

    [Celerity] => Array
        (
            [library_count] => 0
            [crypt_count] => 1
        )

    [Redemption] => Array
        (
            [library_count] => 1
            [crypt_count] => 0
        )

    [Dominate] => Array
        (
            [library_count] => 19
            [crypt_count] => 2
        )

    [Auspex] => Array
        (
            [library_count] => 1
            [crypt_count] => 0
        )

    [Potence] => Array
        (
            [library_count] => 1
            [crypt_count] => 2
        )

)

Array
(
    [Dominate] => Array
        (
            [library_count] => 19
            [crypt_count] => 7
        )

    [Celerity] => Array
        (
            [library_count] => 0
            [crypt_count] => 6
        )

    [Auspex] => Array
        (
            [library_count] => 1
            [crypt_count] => 2
        )

    [Obtenebration] => Array
        (
            [library_count] => 6
            [crypt_count] => 0
        )

    [Necromancy] => Array
        (
            [library_count] => 9
            [crypt_count] => 1
        )

    [Potence] => Array
        (
            [library_count] => 1
            [crypt_count] => 1
        )

)

..这些数组有一些类似的键示例" Celerity"。我想找到两个数组中的公共密钥,并总结它们的库和密码计数,并使它们成为一个数组。

1 个答案:

答案 0 :(得分:0)

您可以使用array_intersect()array_keys()来查找两个阵列中使用的密钥。然后,遍历键以创建新数组:

$keys1 = array_keys($arr1);
$keys2 = array_keys($arr2);
$common_keys = array_intersect($keys1, $keys2) ;
$diff_keys = array_diff($keys1, $keys2);

$out = [];
foreach ($diff_keys as $diff) {
    if (isset($arr1[$diff])) $out[$diff] = $arr1[$diff];
    else $out[$diff] = $arr2[$diff];
}
foreach ($common_keys as $key) {
    $out[$key] = $arr1[$key] ;
    $out[$key]['library_count'] += $arr2[$key]['library_count'];
    $out[$key]['crypt_count'] += $arr2[$key]['crypt_count'];
}
print_r($out);

输出:

Array
(
    [Fortitude] => Array
        (
            [library_count] => 0
            [crypt_count] => 7
        )

    [Dementation] => Array
        (
            [library_count] => 1
            [crypt_count] => 0
        )

    [Obfuscate] => Array
        (
            [library_count] => 0
            [crypt_count] => 2
        )

    [Redemption] => Array
        (
            [library_count] => 1
            [crypt_count] => 0
        )

    [Obtenebration] => Array
        (
            [library_count] => 12
            [crypt_count] => 11
        )

    [Necromancy] => Array
        (
            [library_count] => 18
            [crypt_count] => 3
        )

    [Celerity] => Array
        (
            [library_count] => 0
            [crypt_count] => 7
        )

    [Dominate] => Array
        (
            [library_count] => 38
            [crypt_count] => 9
        )

    [Auspex] => Array
        (
            [library_count] => 2
            [crypt_count] => 2
        )

    [Potence] => Array
        (
            [library_count] => 2
            [crypt_count] => 3
        )

)