将多个数组放在一个大的关联数组中

Put multiple arrays in one large associative array

我正在使用以下循环创建一组数组:

$assessmentArr = explode("&", $assessmentData);

foreach($assessmentArr as $data) {
    $fullArr = explode("_", $data);

    // Break down to only archetype and value
    $resultArr = explode("=", $fullArr[2]);

    //print_r($resultArr);
}

产生以下结果:

Array
(
    [0] => community-support
    [1] => 24
)
Array
(
    [0] => money-rewards
    [1] => 30
)
Array
(
    [0] => status-stability
    [1] => 15
)
Array
(
    [0] => personal-professional-development
    [1] => 32
)
Array
(
    [0] => community-support
    [1] => 9
)
Array
(
    [0] => money-rewards
    [1] => 12
)
Array
(
    [0] => status-stability
    [1] => 16
)
Array
(
    [0] => personal-professional-development
    [1] => 29
)

我需要将这些组合成一个数组,在 [0] 值匹配的地方,我需要将 [1] 值加在一起。

所以我希望最终输出类似于:

Array
(
    [community-support] => 33
    [money-rewards] => 42
    [status-stability] => 31
    [personal-professional-development] => 61
)

我发现了这个问题:How to merge two arrays by summing the merged values 这将帮助我将值合并和相加,但我不确定当数组未分配给变量时如何处理。我正在尝试做的事情是可行的还是我做错了?

不要让它变得复杂,只需检查结果数组是否已经包含具有该键的元素,如果没有则对其进行初始化,否则添加它。例如

(在您的循环中添加此代码):

if(!isset($result[$resultArr[0]]))
    $result[$resultArr[0]] = $resultArr[1];
else
    $result[$resultArr[0]] += $resultArr[1];

那么你就有了你想要的数组:

print_r($result);

你可以这样做

$assessmentArr = explode("&", $assessmentData);
$finalArr = array();
foreach($assessmentArr as $data) {
    $fullArr = explode("_", $data);

    // Break down to only archetype and value
    $resultArr = explode("=", $fullArr[2]);
    if(array_key_exists($resultArr[1], $finalArr)){
        $finalArr[$resultArr[0]] += $resultArr[1];
    }else{
        $finalArr[$resultArr[0]] = $resultArr[1];
    }
}

首先检查数组中是否已存在键,如果存在,则将值添加到最终数组中的值。否则,您将新索引添加到最终数组,并将 resultArr 中的值作为初始值。

...太慢了:/