基于来自另一个数组的类似值的数组值的总和

时间:2015-12-29 18:07:59

标签: php arrays merge

这可能有点令人困惑,但我会尽我所能解释它。请耐心等待。

我有以下数组:

Array
(
    [question1] => 69
    [question2] => 36
    [question3] => 57
    [question4] => 69
    [question5] => 58
    [question6] => 40
    [question7] => 58
)

Array
(
    [question1] => 8
    [question2] => 6
    [question3] => 5
    [question4] => 6
    [question5] => 7
    [question6] => 8
    [question7] => 5
)

正如您所看到的,两个数组具有相同的键,但每个键的值不同。

我需要在第二个数组中找到具有相同值的键,因此[question1][question6]的值都为8。然后在第一个数组中,我需要将[question1][question6]的值加在一起,因为它们在第二个数组中具有相似的值。我需要根据第二个数组中的匹配值将第一个数组值加在一起(如果有意义的话)

理想情况下,输出将是另一个看起来像这样的数组:

Array
(
    [5] => 115
    [8] => 109
    [6] => 105
    [7] => 58
)

第二个数组的值成为键,第一个数组的相加值之和就是值。

现在我不会在这里挑剔,所以如果我们不能把它变成那种确切的格式,那就没关系了。我只需要能够根据第二个数组中的相似值将第一个数组中的值相加。

我希望这是有道理的。如果没有请评论,我会尽力进一步解释。

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是迭代第二个数组。查找第一个数组中的键,如果存在,则将第一个数组中的相应值添加到结果数组中,并使用第二个数组中的值进行索引。

这样的事情:

$array1 = array(
    'question1' => 69,
    'question2' => 36,
    'question3' => 57,
    'question4' => 69,
    'question5' => 58,
    'question6' => 40,
    'question7' => 58,
);
$array2 = array(
    'question1' => 8,
    'question2' => 6,
    'question3' => 5,
    'question4' => 6,
    'question5' => 7,
    'question6' => 8,
    'question7' => 5,
);

// Compose the desired result here
$result = array();

// Iterate over the second array; its values become keys in the result array
foreach ($array2 as $key => $val) {
    // If this is the first time when this value is reached then a corresponding
    // value does not yet exists in the result array; add it
    if (! isset($result[$val])) {
        $result[$val] = 0;
    }

    // Lookup the key into the first array
    if (isset($array1[$key])) {
        // If it exists then add its value to the results
        $result[$val] += $array1[$key];
    }
}

// That's all
print_r($result);