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