我主要使用用于业务系统的语言编程,并且有一个有用的内置函数可以对数组求和。例如,我们有这样的数组:
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....);
答案 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()
答案 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";
}
?>