php - While 循环 - 将标题与循环结果分开 - 循环然后为每组结果添加标题

标签 php mysql

我有一个 while 循环,它将所有链接的数字分成表中的不同部分。以下是声明:

$result2 = mysqli_query($con,"SELECT a.*, b.*, c.* FROM b_statement_main a 
INNER JOIN b_crm_company b ON a.COMPANY_ID = b.ID INNER JOIN b_statement c 
ON a.LINK = c.LINK 
WHERE a.COMPANY_ID = '$companyID2' AND a.COMMENCE BETWEEN '$from2' AND '$to2' ");

$linked = -1;
while($row = mysqli_fetch_array($result2))
{

    $companyName = $row['TITLE'];
    $arDates = strtotime($row['COMMENCE']);
    $remaining = $row['REMAINING_HOURS'];
    $linking = $row['LINK'];
    $arNumber = $row['REF_NUMBER'];
    $billable = $row['BILLABLE'];


    if($linked != $row['LINK'])
    {
    print "<tr><td><strong>$companyName</strong></td><td></td><td><strong>".date('d/m/Y',$arDates)."</strong></td><td></td><td></td><td><strong>$remaining</strong></td></tr>";

    $linked = $row['LINK'];
    }

    print "<tr><td></td><td></td><td></td><td>$arNumber</td><td>$billable</td><td></td></tr>";

}

print "</table>";

因此,它返回的是每个部分的标题,然后循环与下面的查询相关的结果。返回所有相应结果后,它将再次显示标题部分并再次循环相关结果。它将重复此操作,直到显示所有内容。

但是我想要的是标题部分位于循环结果下方。因此,它将循环结果,然后一旦循环了该特定部分的所有结果,就把标题放在下面。然后它将进入并再次循环结果并将标题放在下面,它将继续直到完成。

任何人都知道我该怎么做。显然,如果我将 print 移到 if 之前,那么它会放置结果、标题、结果、标题等。

这就是目前的样子(不准确,只是为了显示标题和结果):

| Company  | Date        | Hours |
| Title 1  | 20/11/2014  |       |
| Result 1 | 10/11/2014  | 44    |
| Result 2 | 08/11/2014  | 22    |

当我需要它时:

| Company  | Date        | Hours |
| Result 1 | 10/11/2014  | 44    |
| Result 2 | 08/11/2014  | 22    |
| Title 1  | 20/11/2014  |       |

最佳答案

如何根据表中所需的条目创建一个新数组。所以你的代码会像这样(注意添加了$outputarray):

编辑:假设每个数据集只有一个标题。如果您希望每组记录有多个标题,则需要在记录中设置用于标识一组的内容。在这种情况下,最简单的方法是根据结果是否是标题(根据您的标准)制作结果的多维数组。

$linked = -1;
while($row = mysqli_fetch_array($result2)){    
    $companyName = $row['TITLE'];
    $arDates = strtotime($row['COMMENCE']);
    $remaining = $row['REMAINING_HOURS'];
    $linking = $row['LINK'];
    $arNumber = $row['REF_NUMBER'];
    $billable = $row['BILLABLE'];

    if($linked != $row['LINK']){
       $outputarray['title'][] ="<tr><td><strong>$companyName</strong></td>
          <td></td><td><strong>".date('d/m/Y',$arDates)."</strong></td><td></td><td>
          </td><td><strong>$remaining</strong></td></tr>";
       $linked = $row['LINK'];
    } else {
       $outputarray['row'][]= "<tr><td></td><td></td><td></td><td>$arNumber</td>
          <td>$billable</td><td></td></tr>";
    }
  }
   print"<table>
         <thead>"; // etc... have the titles go here.
   foreach($outputarray as $key=> $value){
        if($key=='title'){
          $thistitle=$value;
        } else {
          print $value;
        }
   }
   print $thistitle;

   print "</table>";

关于php - While 循环 - 将标题与循环结果分开 - 循环然后为每组结果添加标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27045553/

相关文章:

php - .htaccess 错误文档重定向

php - Laravel 5 Form Request 数据预操作

php - 当链接可以是父链接或子链接时查询生成父名称

php - 使用 JSON 解析 MySQL 数据

mysql - 如何使用 SQL 添加今天的日期作为 csv 文件的名称

php - Laravel,如何将数字转换为小时和分钟

php - 从 Symfony 表单中获取请求对象的最佳方法?

php - 为什么 $request->get() 返回 null?

php - 在迁移中运行原始 SQL

php - 如何在一页php html中显示数据库中的图像?