2017-07-02 7 views
-2

以下のコードは動作し、正確に何を出力しますか?フレームワーク変数の一部である特定のフィールド($ CustomFields ...)の値を取得するforeachループを作成しました。次に、条件が「グループ」の場合にのみ、そのフィールドをカウントします。 その後、私はすべてのフィールド/カウントの平均価格をhetしたい。コードが動作していますが、最適化を求めています

// ########### 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+

ジャスパー

答えて

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; 

わからない(トンを必要としますエスティング)が、この変種はわかりやすいようです。

+0

'$ listing'が' array'か単にiterableかどうかは不明です。 – localheinz

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"; 
} 
は、
+0

ダウンボートの理由が分かります。 –

+0

いいえ、答えに感謝します。私はあなたの考えをまだチェックしています – Jasper

+0

Ok @ジャスパー。下降投票には理由があるはずです。 SOは知識を共有するためのものなので、誰もが学びます。努力を断ってはならない。 –

0

これはいかがですか?

$itemsPerHour = []; 

foreach($listings as $listing) { 
    if ($CustomFields->fieldValue('jr_typeoflesson', $listing, false, false) !== 'group') { 
     continue; 
    } 

    $itemsPerHour[] = $CustomFields->field('jr_hourlyrateus', $listing, false, false); 
} 

$countPerHour = count($itemsPerHour); 

if ($countPerHour > 0) { 
    $averagePerHour = array_sum($itemsPerHour)/$countPerHour; 

    echo round($averagePerHour,2); 
} else { 
    echo "No data"; 
} 
関連する問題