我有一个$department
变量,它是Department
类的一个实例。汇总数组并显示汇总结果旁边的细节
Department
类有一个名为$employees
的属性,其中包含与该部门相关的Employee
实例的数组(从数据库中检索)。
Employee
类有一个属性,称为$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查询填充,订购我多么希望的结果。然后,我使用another question中的一项技术运行单独的SQL查询,以获得每个$job_type_id
的总计$salary
的数组。
但是,第二个查询的结果集存储在另一个变量$subtotals
中。因此,我仍然存在高效地让Sum-Total显示与雇员名单“in-context”的问题。
我碰巧在使用Yii framework,但是这可能是不相关的,除非我应该从完全不同的角度思考或处理这类问题。请在评论中告诉我。
更新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++;
}
?>
你就不能在一个初始化的变量'0'并在循环数据时执行'$ var + = $ employee-> salary_amount'?然后最后你会得到你想要的数额。附:你应该多付约翰·Q·史密斯,如果他看到了这一点,他就会青睐 - 那些像Q这样的中间初始值得肯定的人应该更多:-D – DaveRandom 2012-07-11 21:35:08
@DaveRandom是的,我也这么认为。可怜的bug子手。我正在采用'foreach'循环的方法,但是当试图找到同一个'$ job_type_id'结束和下一个开始的组时,它似乎很笨拙,因此我可以输出中间的总数。我试图使用一堆'if语句',但代码变得很难看,并且不能正常工作..所以我希望有更好的方法。 – Turgs 2012-07-11 22:22:24
我正在想办法用SQL'GROUP BY'完成整个工作,但我想不出任何本身没什么问题的东西。我会告诉你想我可以想到,如果你喜欢,虽然... – DaveRandom 2012-07-11 22:31:14