用PHP汇总数组

时间:2011-06-09 07:22:40

标签: php

我主要使用用于业务系统的语言编程,并且有一个有用的内置函数可以对数组求和。例如,我们有这样的数组:

red | 1
red | 1
green | 1
orange | 2
orange | 1
orange | 1
blue | 1

使用汇总功能后我们得到

red | 2
green | 1
orange | 4
blue | 1

它是php中的等效函数吗?

UPD。

$array = array('red'=>1,'red'=>2,'green'=>1....);

4 个答案:

答案 0 :(得分:3)

在php中

red | 1
red | 1
green | 1
orange | 2
orange | 1
orange | 1
blue | 1

这种阵列是不可能的。 PHP数组不能有多个具有相同名称的索引键。它将覆盖前一个。

答案 1 :(得分:1)

如上所述,像

这样的数组
array('red'=>1,'red'=>2,'green'=>1....);

是不可能的。试一试,然后制作一个print_r。您将看到只有一个red条目的值为2(或者最后一个值是什么)。最后一个将覆盖之前的那些。

根据您创建数组的方式,您可以动态对值进行求和,例如

for(...) {

    if(!isset($array[$color])) {
        $array[$color] = 0;
    }

    $array[$color] += $value;

}

或创建一个多维数组:

$array = array(
    'red'=> array(1,2),
    'green'=> array(1),
    ...
);

然后,您可以array_map对其进行循环,并使用array_sum计算每个条目的总和:

$newarray = array_map('array_sum', $array);

答案 2 :(得分:0)

您的初始数组应仅包含值。您可以使用array_values()。之后,您可以使用array_count_values()

计算值

http://php.net/manual/en/function.array-count-values.php

答案 3 :(得分:0)

假设你有这样的数组:

$array = array(
    'red | 1',
    'red | 1',
    'green | 1',
    'orange | 2',
    'orange | 1',
    'orange | 1',
    'blue | 1'
);

您可以这样处理:

<?php
//process the array data
$temp_output = array();
foreach( $array as $raw)
{
    list($name, $value) = array_map('trim', explode("|", $raw));
    if( !isset($temp_output[ $name ] ) )
        $temp_output[ $name ] = (int)$value;
    else
        $temp_output[ $name ] += (int)$value;
}
//now, print the value
foreach( $temp_output as $key => $data)
{
    echo "{$key} | {$data}\n";
}
?>