如果我的问题措辞不正确,请原谅我,这是我的第一篇文章。 另外我会先说我正在使用程序化的PHP,我确实知道OO PHP的优点,但还没有学到这一点。
我正在努力实现的目标:
在PHP中打印一个包含4个分组级别的报告(在类别,子类别,周和项目上) 在显示详细信息(订购商品的日期/供应商/价格/数量),然后是每周商品和子类别总计时,不会多次重新打印每个组值。这大致是它应该是什么样的:http://www.designtime.net/rpt.png
我的方法:
我从MySQL中获取给定项目中每一个给定项目,因此每一行都有类别,子类别,周,项目名称,订单日期,供应商名称,价格,数量,分机,按顺序排序和u /米。每个类别/子类别/周和项目可能在结果集中重复,因此我需要在PHP中过滤重复。
我没有计算MySQL查询中的每周总数或子类别总数,我将其留给PHP(我还没有看到这样做的方法)。
我将MySQL结果存储在名为ord_data的多维数组中。 然后我循环遍历这个数组两次 - 首先计算每个类别,子类别,周和项目的出现次数,然后我将这些总计存储到一个名为cnt_occurence的单独数组中,这样我就可以在打印数据时预先知道总数,这样我就可以打印出来了。总计在正确的地方。然后我再次遍历ord_data以打印出数据,同时与cnt_occurences进行比较,因此我知道何时a)打印新类别,子类别等的时间.b)计算和打印每周项目和子类别总计的时间。
我遇到的问题是比较2个阵列。这需要大量复杂的代码才能完成。你能告诉我吗: 1)我的方法是否有声音? 2)你会使用一个数组来放入我需要的所有组项目(catid,totalcat,subcatid等等)
以下是执行计数的代码示例:
$cur_catid = "0";
$prev_catid = "0";
$num_cats = 0;
$num_c_rows = 0;
$cnt_occurences = array();
foreach($ ord_data as $ o) {
while(list($k, $v) = each ($o))
{
if ($k == 'catid')
{
$cur_catid = $v;
if ($cur_catid != $prev_catid)
{
$num_cats++; // count distinct cats each item we switch
if ($prev_catid != 0)
{
$cnt_occurences[] = array("catid" => $prev_catid,
"num_c_rows" => $num_c_rows);
}