Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-合并两个关联数组(如果键存在,则添加值)_Php_Arrays - Fatal编程技术网

PHP-合并两个关联数组(如果键存在,则添加值)

PHP-合并两个关联数组(如果键存在,则添加值),php,arrays,Php,Arrays,我有两个关联数组,它们彼此非常相似,但不相同。它们都是单独的数组,我想将它们合并在一起,同时维护两个数组。这可以通过以下方式完成: 如果键已经存在,请确保添加值,即两个数组都包含键'dragon',并且第一个数组的值可能为'30',第二个数组的值可能为'26',我希望它给我'56' 如果第一个数组中不存在这些键,只需正常合并即可。 我试过使用$tagItems=array\u count\u value$tagItems,$tagItems2;但当我尝试对json编码并回显它时,这只会给我nul

我有两个关联数组,它们彼此非常相似,但不相同。它们都是单独的数组,我想将它们合并在一起,同时维护两个数组。这可以通过以下方式完成:

如果键已经存在,请确保添加值,即两个数组都包含键'dragon',并且第一个数组的值可能为'30',第二个数组的值可能为'26',我希望它给我'56' 如果第一个数组中不存在这些键,只需正常合并即可。 我试过使用$tagItems=array\u count\u value$tagItems,$tagItems2;但当我尝试对json编码并回显它时,这只会给我null

我还尝试使用$tagItems=array\u merge$tagItems$tagItems2;这会添加新的关键点,但不会合并重复的关键点值,只会保留合并的数组值

JSON格式的数组如下所示,一个数组称为$tagItems,另一个数组称为$tagItems2

{
   "game1": 22,
   "game2": 20,
   "game3": 16,
}
{
   "game1": 22,
   "game2": 20,
   "game3": 16,
   "game4": 12,
}

什么允许我这样做?

以最短的形式将$b合并为$a:

但是,最好在写入之前检查数组键是否存在:

if (!array_key_exists($key, $a)) {
    $a[$key] = 0;
}
$a[$key] += $value;

以最短的形式将$b合并为$a:

但是,最好在写入之前检查数组键是否存在:

if (!array_key_exists($key, $a)) {
    $a[$key] = 0;
}
$a[$key] += $value;

此方法使用映射,并允许任一数组的键不存在于另一个数组中

$merged = array_fill_keys(array_keys($a + $b), 0);
$sums = array_map(
    function($aVal, $bVal) { return $aVal + $bVal; },
    array_merge($merged, $a),
    array_merge($merged, $b)
);
$merged = array_combine(array_keys($merged), $sums);

此方法使用映射,并允许任一数组的键不存在于另一个数组中

$merged = array_fill_keys(array_keys($a + $b), 0);
$sums = array_map(
    function($aVal, $bVal) { return $aVal + $bVal; },
    array_merge($merged, $a),
    array_merge($merged, $b)
);
$merged = array_combine(array_keys($merged), $sums);

我想你需要先提取值,然后求和,然后重新分组。我想你需要先提取值,然后求和,然后重新分组。我刚才回答了这个问题,但这个问题比我的答案要短,这就更好了+1@xYuri越短越好,但往往越短越好worse@nogad,我正在写我的答案,但它会成功的same@nogad,我是这样写我的答案的foreach{ifkey_exists{$tagItems[$ti2]=$val}}当然有变量,那么是什么让我的长比他的短呢?@RobbieAverill,我认为OP想要添加新的VAL以及对旧的VAL求和,所以你的第一个工作非常完美我回答了,但这比我的答案短,这使它更好+1@xYuri越短越好,但往往越短越好worse@nogad,我正在写我的答案,但它会成功的same@nogad,我是这样写我的答案的foreach{ifkey_exists{$tagItems[$ti2]=$val}}当然有变量,那么是什么让我的长比他的短呢?@RobbieAverill,我认为OP希望添加新的VAL以及对旧VAL求和,因此您的第一个VAL工作得非常完美