我有以下数组:
$array = array(
array("A",105),
array("B",125),
array("C",325),
array("D",435),
array("A",110),
array("A",115),
array("C",400),
array("D",650),
array("E",750)
);
并想对其进行一些操作,如下所示:
首先:对 key[0] 相同的值进行分组,将它们提高到 2 次方并求和。为此,我编写了以下代码:
$result = array();
foreach ($array as $value){
if (!array_key_exists($value[0], $result)){
$result[$value[0]] = array();
}
$result[$value[0]][] = pow($value[1],2);
}
array_walk($result, create_function('&$v,$k', '$v = array_sum($v);'));
这样我们就有了预期的结果:
Array (
[A] => 36350
[B] => 15625
[C] => 265625
[D] => 611725
[E] => 562500
)
第二:将这些值中的每一个除以所有它们的总和。换句话说(或者其他数字更好:-)
Sum of them all: 36350 + 15625 + 265625 + 611725 + 562500 = 1491825
然后,划分:
[A] 36350 / 1491825
[B] 15625 / 1491825
...
[E] 562500 / 1491825
所以最后我们有这样的东西:
Array (
[A] 0.0243
[B] 0.1047
...
[E] 0.3770
)
我是这样想的:
array_walk($result, create_function('&$v,$k', '$v = array_sum($v) / count($v);'));
但后来我意识到这是不正确的,因为第一个值只会除以 A 出现的次数,第二个值除以 B 的出现次数,等等。
所以我们会有:
Array (
[A] => 36350 / 3 = 12116.666666667
[B] => 15625 / 1 = 15625
[C] => 265625 / 2 = 132812.5
[D] => 611725 / 2 = 305862.5
[E] => 562500 / 1 = 562500
)
我正在搜索的是子数组分组值的一种加权算术平均值。
如果有人能帮助我找到这个问题的答案,我将不胜感激。
提前谢谢了。