一个总和且唯一

时间:2015-08-12 13:54:18

标签: php arrays multidimensional-array sum unique

首先,我要感谢大家在这种情况下帮助我。这是我不知道如何执行的。

我有这个:

while($result = $s->fetch(PDO::FETCH_OBJ)){

    $Itinerario = $result->Itinerario;
    $Tarifa = $result->ValorTarifa;
    $Distancia = $result->DistanciaItinerario;

    $siglaBase = wordwrap($Itinerario, 3, "-", true);

    $novoArrayYield[] = array("base"=>$siglaBase, "yield"=>number_format(($Tarifa / $Distancia), 3, '.', ''));
}

同时打印出以下结果:

[0] => Array
    (
        [base] => RAO-ROO
        [yield] => 0.224
    )

[1] => Array
    (
        [base] => RAO-ROO
        [yield] => 0.224
    )

[2] => Array
    (
        [base] => RAO-ROO
        [yield] => 0.337
    )

[3] => Array
    (
        [base] => SJP-GRU-GRU-UDI-UDI-RAO-RAO-ROO
        [yield] => 0.132
    )

[4] => Array
    (
        [base] => BSB-RAO-RAO-ROO
        [yield] => 0.476
    )

[5] => Array
    (
        [base] => SJP-GRU-GRU-UDI-UDI-RAO-RAO-ROO
        [yield] => 0.176
    )

[6] => Array
    (
        [base] => GIG-RAO-RAO-ROO
        [yield] => 0.194
    )

我一直在尝试创建一个结果为:

的新数组

如果基数是RAO-ROO,我需要将所有收益率值相加并除以我看到RAO-ROO以获得平均收益率结果的次数。这适用于所有其他可能不同的基础。 在这种情况下,应该是:RAO-ROO =(0.224 + 0.224 + 0.337)/ 3次显示

我希望结果如下:

[0] => Array
    (
        [base] => RAO-ROO
        [yield] => 0.261
    )

[1] => Array
    (
        [base] => SJP-GRU-GRU-UDI-UDI-RAO-RAO-ROO
        [yield] => 0.154
    )

[2] => Array
    (
        [base] => BSB-RAO-RAO-ROO
        [yield] => 0.476
    )

[3] => Array
    (
        [base] => GIG-RAO-RAO-ROO
        [yield] => 0.194
    )

到目前为止,我得到了这个:

$newArray = array();
while ( $row = array_shift($novoArrayYield) ) {
     if ( !array_key_exists( $row['base'], $newArray ) ) {
            $newArray[$row['base']] = $row;
     } else {
            $newArray[$row['base']]['yield'] += $row['yield'];
     }
}
print "<pre>";
print_r( $newArray );
print "</pre>";

现在我需要计算如何计算每个基数显示的次数,并将其产量除以这个次数以获得平均值。

请帮忙吗?再次感谢你!

1 个答案:

答案 0 :(得分:0)

你必须先将所有收益率分组,这样你才知道要除以多少收益,试试这样的东西[TESTED]:

while ( $row = array_shift($novoArrayYield) ) {

    $groupedBases[$row['base']][] = $row['yield'];
}

foreach ($groupedBases as $base => $yields) {

    var_dump(sprintf('Base: %s | Average: %2.3f', $base, (array_sum($yields) / count($yields))));
}