当前位置: 首页 > 知识库问答 >
问题:

在相交时合并两个多维数组并求和值

萧安怡
2023-03-14

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

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个答案

贺浩漫
2023-03-14

您可以使用array\u intersect()array\u 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
        )

)
 类似资料:
  • 问题内容: 我需要将2个多维数组合并在一起以创建一个新数组。 这两个数组是从和创建的,我需要将它们彼此关联。 数组#1 阵列#2 新阵列 我正在使用的当前代码有效,但仅适用于数组中的最后一项。 我想通过循环该函数在每个循环中擦除新数组。 我该如何纠正? 问题答案: []会将其附加到数组而不是覆盖。

  • 问题内容: 我正在寻找一个jQuery方法来合并两个数组,以便它们的值交替出现: 我想要的结果是: 请注意,我知道在JS中做到这一点并不重要,但是我追求的是jQuery方法。 问题答案: 您可以使用以下方法:

  • 问题内容: 我有两个像这样的数组: 我想结合这两个数组,使其不包含重复项,并保留其原始键。例如,输出应为: 我已经尝试过了,但是它正在更改其原始键: 有什么办法吗? 问题答案: 只需使用: 那应该解决。因为如果一个键出现多次(例如在您的示例中),则使用字符串键,因此一个键将覆盖具有相同名称的处理键。因为在您的情况下,它们两者都具有相同的值,但这无关紧要,并且还会删除重复项。 更新:我刚刚意识到,P

  • 问题内容: 我有2个数组 我是否可以将这些单独的数组合并为一个并将这些值相加,以便结果为: 这是我目前拥有的功能,但我似乎无法使其工作: 问题答案: 可以用两行代码完成此实际计算,而无需循环: http://codepad.viper-7.com/ieSkHQ 您只需要进行适当的调整即可解决您的嵌套结构。

  • 问题内容: 我有两个数组,我想将这两个数组合并为一个数组。请查看以下详细信息: 第一个数组: 第二个数组: 我想要这个结果。有人知道该怎么做吗? 希望你理解这个问题。先感谢您。 问题答案: 已修正 (再次) 接受无限数量的输入数组,将所有子数组作为索引数组合并到一个容器中,然后返回结果。 编辑03/2014: 提高可读性和效率

  • 问题内容: 我正在尝试使用两列来连接两个熊猫数据框: 但出现以下错误: 任何想法应该是正确的方法吗?谢谢! 问题答案: 尝试这个 https://pandas.pydata.org/pandas- docs/stable/reference/api/pandas.DataFrame.merge.html left_on:要在左侧DataFrame中加入的标签或列表或类似数组的字段名称。可以是Dat

  • 问题内容: 给定两个排序数组,如下所示: 我希望输出为: 要么: 我知道我可以执行以下操作: 我只是想知道是否有一种更快的方法,因为我要处理的数组具有数百万个元素。 任何想法都欢迎。谢谢 问题答案: 由于您使用numpy,因此我怀疑bisec根本不会对您有所帮助。因此,我建议您做两件事: 千万 不能 使用,使用方法,而不是这种种取代阵列,避免了复制。 必须使用没有到位的。因此,不要手动使用逻辑。I

  • 问题内容: 我有两个数组。 我需要合并这些数组,并在下拉列表中显示为 我怎么能使用swift.im新手来快速获得此结果,有人可以帮忙吗? 问题答案: 压缩数组并连接结果: