Foreach代码工作 - 但要求优化

时间:2017-07-02 09:02:37

标签: php

以下代码可以正常输出并输出我想要的内容。我做了一个foreach循环获取特定字段的值($ CustomFields ...),它是框架变量的一部分。然后仅当条件为“组”时才计算该字段。 在那之后我想要计算所有领域/平均价格。

// ########### Get average hourly rate for group classes
$itemsperhour = array();
$countperhour = 0;

foreach($listings as $listing) {
    if ($CustomFields->fieldValue('jr_typeoflesson',$listing,false,false) == 'group') {
        $itemsperhour[] = $CustomFields->field('jr_hourlyrateus',$listing,false,false);
        $countperhour = $countperhour + 1;
    }
}

//print_r($items);

if ($countperhour > 0) {
    $totalperhour = array_sum($itemsperhour);
    $averageperhour =($totalperhour / $countperhour);
    echo round($averageperhour,2);
} else {
    echo "No data";
}

unset ($averageperhour);

如上所述,该片段有效。但是,我可以问其他人如何编写与优化这样一段代码相关的脚本(为了速度和可读性? PHP 5.6 +

贾斯珀

3 个答案:

答案 0 :(得分:0)

以下是一种优化方式:

$totalperhour = 0;
$countperhour = 0;
foreach($listings as $listing) {
    if ($CustomFields->fieldValue('jr_typeoflesson',$listing,false,false) == 'group') {
        $totalperhour += $CustomFields->field('jr_hourlyrateus',$listing,false,false);
        $countperhour = $countperhour + 1;
    }
}

if($countperhour > 0) {
    $averageperhour =($totalperhour / $countperhour);
    echo round($averageperhour,2);
    $averageperhour = '';
} else {
    echo "No data";
}

答案 1 :(得分:0)

我希望使用array_reduce函数来获得平均值:

$averageperhour = array_reduce($listings, function($average, $listing) use (&$CustomFields)
{
    static $sum = 0;
    static $counter = 0;

    if ($CustomFields->fieldValue('jr_typeoflesson', $listing, false, false) == 'group') {
        $sum += $CustomFields->field('jr_hourlyrateus', $listing, false, false);
        $counter ++;
        $average = round(($sum / $counter), 2);
    }

    return $average;
}, 'No data');

echo $averageperhour;

不确定速度提升(需要测试),但这种变体在我看来更具可读性。

答案 2 :(得分:0)

这个怎么样?

...and so on