【问题标题】:Categorizing my foreach loop result对我的 foreach 循环结果进行分类
【发布时间】:2026-01-25 17:30:01
【问题描述】:

我的 SQL 结果 getResult 有很多行,在 Header 和 SubHeader 的每一列中都有不同的值,所以我希望它被分类,现在我想为每个 subHeader 添加一个总结果,计算 getResult 行

$header = "";
$subHeader = "";
$getResult = "";

foreach($QueryMySql as row):

if($header != $row->headerColumn)
{
   $header = $row->headerColumn."<br />";
   $get .= $header;
}
if($subHeader != $row->subHeaderColumn)
{ 
   $subHeader = $row->subHeaderColumn."<br />";
   $get .= $subHeader;  
}
   $getResult = $row->getResultColumn."<br />";
   $get .= $getResult;

endforeach;

结果


美国位置(标题)

ICT部门(子标题)

1 (emp_name)getResult

2 (emp_name)getResult

3 (emp_name)getResult

total: 3

会计部门(副标题)

1 (emp_name)getResult

2 (emp_name)getResult

3 (emp_name)getResult

4 (emp_name)getResult

total: 4

巴基斯坦(标题)

ICT部门(子标题)

1 (emp_name)getResult

2 (emp_name)getResult

3 (emp_name)getResult

4 (emp_name)getResult

total: 4


印度(标题)

工程部(子表头)

1 (emp_name)getResult

2 (emp_name)getResult

3 (emp_name)getResult

4 (emp_name)getResult

total: 4

【问题讨论】:

    标签: php mysql sql codeigniter foreach


    【解决方案1】:

    我的理解是你想要计算列,如果没有,请更新你想要的输出,如果是,那么使用这个代码来计算所有记录并将结果保存在输出中:

    $grandTtoal = 0;$tempHeader='';$tempSubHeader='';
    foreach($QueryMySql as $OneRow){
        if($tempHeader == '' || $tempHeader != $OneRow->headerColumn)
        {
           echo $tempHeader = $OneRow->headerColumn."<br />";
        }
        if($tempSubHeader =='' || $tempSubHeader != $OneRow->subHeaderColumn)
        { 
           echo $tempSubHeader = $OneRow->subHeaderColumn."<br />"; 
        }
        for($i=0; $i<mysql_num_fields($OneRow);$i++ )
        {
             echo ($i+1).' '.$OneRow[$i]->getResultColumn."<br />";
        }
        echo "Total: ".$i;
        $grandTtoal += $i;        
    }
    echo "Grand Total: ".$grandTtoal;
    

    第二个选项。

    $grandTtoal = 0;$tempHeader='';$tempSubHeader='';
        foreach($QueryMySql as $OneRow){
            if($tempHeader == '' || $tempHeader != $OneRow->headerColumn)
            {
               echo $tempHeader = '<h1>'.$OneRow->headerColumn.'</h1>'."<br />";
            }
            if($tempSubHeader =='' || $tempSubHeader != $OneRow->subHeaderColumn)
            { 
               echo $tempSubHeader = '</h4>'.$OneRow->subHeaderColumn.'</h4>'."<br />"; 
            }
            for($i=0; $i<mysql_num_fields($OneRow);$i++ )
            {
                 echo ($i+1).' '.$OneRow[$i]->getResultColumn."<br />";
            }
            echo "Total: ".mysql_num_fields($OneRow);
            $grandTtoal += mysql_num_fields($OneRow);        
        }
        echo "Grand Total: ".$grandTtoal;
    

    【讨论】:

    • 嗨,Imran,我应该把它放在我的代码哪里?我想要的是拥有像上面显示的那样的结构,而不仅仅是计算结果
    • 效果很好!谢谢伊姆兰!你把我的生命从灾难中拯救出来
    • 欢迎您,如果您想与标题子标题行区分开来,那么您可以尝试第二个 sol。
    • 两者都完美运行!你是一个了不起的人 Imran,但我怎样才能将 mysql_num_fields 更改为 codeigniter 格式?你有什么想法吗?
    • $query->num_fields() 在 codeigniter 中是等量的,它计算查询结果中的字段数
    【解决方案2】:

    快速解决方案。

    $head =array();$i = $j = $k = 1;
    foreach($QueryMySql as $row){
        if($row->headerColumn == 'Header1'){
             if(!in_array('Header1', $head)){
                echo $row->headerColumn."<br/>";
                echo $row->subHeaderColumn."<br/>";
                $head[]   = $row->subHeaderColumn;     
             } 
    
             echo $i . $row->getResultColumn."<br />";
             $i++;
    
        }elseif($row->headerColumn == 'Header2') {
            if(!in_array('Header2', $head)){
                echo $row->headerColumn."<br/>";
                echo $row->subHeaderColumn."<br/>";
                $head[]   = $row->subHeaderColumn;     
             } 
    
             echo $j . $row->getResultColumn."<br />";
             $j++;
    
        }elseif($row->headerColumn == 'Header3') {
            if(!in_array('Header3', $head)){
                echo $row->headerColumn."<br/>";
                echo $row->subHeaderColumn."<br/>";
                $head[]   = $row->subHeaderColumn;     
             } 
    
             echo $k . $row->getResultColumn."<br />";
             $k++;
        }        
    }
    

    【讨论】:

    • 嗨,richie,标题和子标题只是我制作的一个示例,因为这是分类的,例如标题是位置,子标题是部门名称,getresults 是每个位置的员工和部门,它是由我创建的 SQL 查询返回的。谢谢!