【问题标题】:Merging two multidimensional arrays while intersecting them and sum the values合并两个多维数组,同时将它们相交并对值求和
【发布时间】:2018-09-02 09:07:27
【问题描述】:

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

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”。我想在两个数组中找到公共密钥,并将它们的库和加密计数相加,并将它们变成一个数组。

【问题讨论】:

    标签: php arrays sorting multidimensional-array


    【解决方案1】:

    您可以使用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
            )
    
    )
    

    【讨论】:

    • 但它已经从数组中删除了其他键,例如“Fortitude”
    • 我想在一个数组中包含两个数组上的公共键和不常见的键的总和。
    猜你喜欢
    • 2020-11-30
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多