多维数组中的PHP Array_Sum

4
如果我在PHP中有一个多维数组,就像这样...
    [0] => Array
    (
        [url] => http://domain1.com
        [domain] => domain1.com
        [values] => Array
            (
                [character_length] => 25
                [word_count] => 7
            )

    )

    [1] => Array
    (
        [url] => http://domain2.com
        [domain] => domain2.com
        [values] => Array
            (
                [character_length] => 30
                [word_count] => 7

    )

如何将它们合并以生成...
    [0] => Array
    (
        [url] => *can be anything*
        [domain] => *can be anything*
        [values] => Array
            (
                [character_length] => 55
                [word_count] => 14
            )

    )
3个回答

7
我认为没有内置函数可以让您对多维数组的值求和。然而,以下是一种使用lambda风格函数进行操作的方法。
假设这是您的数组:
```html

Let's suppose this is your array:

```
 [items] => Array
        (
            [0] => Array
                (
                    [ID] => 11
                    [barcode] => 234334
                    [manufacturer] => Dell
                    [model] => D630
                    [serial] => 324233
                    [current_value] => 1100.00
                )

            [1] => Array
                (
                    [ID] => 22
                    [barcode] => 323552
                    [manufacturer] => Dell
                    [model] => D630
                    [serial] => 234322
                    [current_value] => 1500.00
                )

        )

您可以创建一个函数,可以将值传递给该函数:
$array_value_sum = create_function('$array,$key', '$total = 0; foreach($array as $row) $total = $total + $row[$key]; return $total;');

然后像这样使用:

echo "Total Current Value" . $array_value_sum($obj['items'], 'current_value');

这正是我正在寻找的。 - AdRock
使用Doctrine 2解决我的FROM(SELECT ...)问题的好方法。 - Sky21.86

5

只需对所有项目进行简单的foreach,并将值相加:

$values = array(
    'character_length' => 0,
    'word_count'       => 0
);
foreach ($array as $item) {
    $values['character_length'] += $item['values']['character_length'];
    $values['word_count']       += $item['values']['word_count'];
}

1
你可以使用 array_sum()array_map() 函数来完成此操作,示例如下:
$totalCharacterLength = array_sum(array_map(function($item) { 
    return $item['values']['character_length']; 
}, $totalCharacterLength));

$totalWordCount = array_sum(array_map(function($item) { 
    return $item['values']['word_count']; 
}, $totalWordCount));

1
最佳答案,除了array_sum的第二个参数应该是数组变量。对于这种方法仍然+1。 - smozgur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接