在PHP中组合和添加数组值

时间:2014-10-06 17:41:27

标签: php arrays

我有一个像这样结构的数组:

Array
(
    [0] => Array
        (
            [0] => cmi.interactions.0.result
            [1] => 1
            [2] => 0
        )

    [1] => Array
        (
            [0] => cmi.interactions.0.result
            [1] => 0
            [2] => 1
        )

    [2] => Array
        (
            [0] => cmi.interactions.0.result
            [1] => 0
            [2] => 1
        )

    [3] => Array
        (
            [0] => cmi.interactions.1.result
            [1] => 1
            [2] => 0
        )

    [4] => Array
        (
            [0] => cmi.interactions.1.result
            [1] => 1
            [2] => 0
        )

    [5] => Array
        (
            [0] => cmi.interactions.1.result
            [1] => 1
            [2] => 0
        )
)

我想要的是以下内容:

Array
(
    [0] => Array
        (
            [0] => cmi.interactions.0.result
            [1] => 1
            [2] => 2
        )

    [1] => Array
        (
            [0] => cmi.interactions.1.result
            [1] => 3
            [2] => 0
        )
)

基本上我想知道如何找到每个子阵列中第一个值匹配的位置并相应地添加第二个和第三个值?

3 个答案:

答案 0 :(得分:0)

像这样的东西,没有检查

$out = array();
foreach($arr as $el)
  if (!isset($out[$el[0]]))
     $out[$el[0]] = $el;
  else
     for($i = 1; $i < count($el); $i++)
        $out[$el[0]][$i] += $el[$i];

您可以在此之后删除密钥,例如$out = array_values($out);

答案 1 :(得分:0)

对于这种情况,您可以使用以下算法: -

  1. 对数组进行排序
  2. 迭代您的数组,并在第0个元素发生更改时跟踪数组。
  3. 在2个不同的变量中维持2个总和。
  4. 以下是算法的提示。我没有测试它,因此,它可能无法完全运行。但这应该会给你一个很好的提示。

    $prevValue="";
    $sum1=0;
    $sum2=0;
    $index=0;
    foreach ($arr as $value) {
        if($prevValue==$value[0])
        {
            if(value[1]==1)
                $sum1++;
            if(value[2]==1)
                $sum2++;
        }else{
            $ansArr[$index]=array($value[0], $sum1,$sum2);
        }
    
        $prevValue=$value[0];
    }
    

答案 2 :(得分:0)

你去吧。我们将第二个数组构建为$ a2并向其添加元素并将总和累积到其中。测试你的价值确定。

function parse($a)
{
    $a2 = array();
    for ($i = 0; $i < sizeof($a); $i++) {
        $isFound = false;
        for ($i2 = 0; $i2 < sizeof($a2); $i2++) {
            if ($a[$i][0] == $a2[$i2][0]) {
                // We've already run into this search value before
                // So add the the elements
                $isFound = true;
                $a2[$i2][1] += $a[$i][1];
                $a2[$i2][2] += $a[$i][2];
                break;
            }
        }
        if (!$isFound) {
            // No matches yet
            // We need to add this one to the array
            $a2[] = $a[$i];
        }
    }
    return $a2;
}