クラスのインスタンスである$department
変数があります。Department
Department
クラスには、その部門に関連するインスタンスの配列を含むというプロパティがあり$employees
ますEmployee
(データベースから取得)。
このEmployee
クラスには、andというプロパティが$salary_amount
あり$job_type_id
ます。$employees
配列要素は、によって一緒に順序付けられます$job_type_id
。
指定された部門について、次のようにその部門の従業員のリストを出力しています。
Employees for IT Department
----------------------------
<?php foreach($department->employees as $employee): ?>
<?php echo $employee->name; ?>
<?php echo $employee->salary_amount; ?>
<?php endforeach; ?>
従業員のリストと一緒にそれぞれ$department->employees
の合計を表示できる ように操作する効率的な方法は何ですか?$salary_amount
$job_type_id
Employees for IT Department
----------------------------
## Help Desk ##
Joseph Lazar
$47,000
John Q. Smith
$15,444
--> Total Salary for Help Desk: $62,444
## Database Administrator ##
Piet Pietersen
$55,120
Ivan Horvat
$63,750
--> Total Salary for Help Desk: $118,870
現在のアプローチ
現在、$employees
単一のSQLクエリが入力されており、結果を希望どおりに並べ替えています。次に、別のSQLクエリを実行して、別の質問の手法を使用して、$salary
それぞれの合計の配列を取得します。$job_type_id
ただし、この2番目のクエリの結果セットは別の変数に格納されます$subtotals
。したがって、Sum-Totalを効率的に取得して、従業員のリストと「コンテキスト内」で表示するという問題がまだあります。
私はたまたまYiiフレームワークを使用していますが、まったく異なる視点からこのタイプの問題について考えたりアプローチしたりする必要がない限り、それはおそらく無関係ですか?コメントで教えてください。
アップデート1
これが私が使用している現在のコードですが、それは厄介で、より良い方法があるように感じます。上で述べたように、集約は別のSQLによって行われますが、私は別の方法を受け入れています。
<?php
$employee_key = 0;
$employees_count = sizeof($department->employees);
$type_sum_key = 0;
$current_type_in_focus = null;
$next_type_in_focus = null;
foreach($department->employees as $employee)
{
$current_type_in_focus = $employee->job_type_id;
$next_type_in_focus = (isset($department->employees[$employee_key+1])) ? $department->employees[$employee_key+1]->job_type_id : null;
# output individual employee data
echo $employee->name;
echo $employee->salary_amount;
# output aggregated total for job type
if ( $current_type_in_focus !== $next_type_in_focus || $employee_key+1 == $employees_count )
{
echo '--> Total Salary for ' . $employee->jobType->name . ': ' . $department->subtotals[$type_sum_key]->total;
$type_sum_key++;
}
$income_key++;
}
?>