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

时间:2015-06-03 19:49:11

标签: php arrays multidimensional-array 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这将有助于我将值合并并添加到一起,但是当阵列没有分配给变量时,我不确定如何解决这个问题。我正在尝试做什么,或者我是否采取了错误的方式?

2 个答案:

答案 0 :(得分:2)

不要让它变得复杂,只需检查结果数组是否已经有一个带有该键的元素,如果没有初始化它,否则添加它。 E.g。

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

echo "<thead>";
echo "<th>My Header 1</th>";
echo "<th>My Header 2</th>";
echo "</thead>";

然后你有你想要的阵列:

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

答案 1 :(得分:0)

你可以这样做

$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中的值作为初始值。

......太慢了:/