Php 在格式化的html表中打印mysqli结果

Php 在格式化的html表中打印mysqli结果,php,html,mysql,mysqli,html-table,Php,Html,Mysql,Mysqli,Html Table,我有一个mysqli查询,返回以下结果: +--------+------+-----------+---------+-------+----------+ | Agent | Date | operation | article | num | quantity | +--------+------+-----------+---------+-------+----------+ | Albert | D1 | SL1 | A | 0001 |

我有一个mysqli查询,返回以下结果:

+--------+------+-----------+---------+-------+----------+
| Agent  | Date | operation | article |  num  | quantity |
+--------+------+-----------+---------+-------+----------+
| Albert | D1   | SL1       | A       |  0001 |      300 |
| Albert | D1   | SL1       | A       |  0002 |      400 |
| Albert | D3   | SL2       | B       | 00046 |      100 |
| Robert | D3   | SL4       | A       |  1231 |      400 |
| Robert | D3   | SL5       | C       |   888 |       20 |
| Robert | D2   | SL3       | B       |  9999 |       90 |
+--------+------+-----------+---------+-------+----------+
查询顺序为代理ASC、日期ASC、操作ASC、艺术ASC

我试图以以下方式将结果打印到格式化的HTML表中

Agent: ALBERT
     DATE : D1
       Operation: SL1
          ARTICLE : A
             num: 0001 | Quantity: 300
             num: 0002 | Quantity: 400
     DATE : D3
       Operation: SL2
          ARTICLE : B
             num: 00046 | Quantity:100
Agent: Robert
     DATE: D3
       Operation: SL4
          ARTICLE : A
             num: 1231  | Quantity: 400
       Operation: SL5
          ARTICLE : C
             num: 888  | Quantity: 20
     DATE: DX
       Operation: SL3
          ARTICLE : B
             num: 9999  | Quantity: 90
Agent: ALBERT
     DATE : D1
       Operation: SL1
          ARTICLE : A
             num: 0001 | Quantity: 300
             num: 0002 | Quantity: 400
     DATE : D3
       Operation: SL2
          ARTICLE : B
             num: 00046 | Quantity:100
Agent: Robert
     DATE: D3
       Operation: SL4
          ARTICLE : A
             num: 1231  | Quantity: 400
       Operation: SL5
          ARTICLE : C
             num: 888  | Quantity: 20
     DATE: DX
       Operation: SL3
          ARTICLE : B
             num: 9999  | Quantity: 90
我尝试过这样做,但没有成功:

$prevAgent="";
$prevDate="";
$prevOperation="";
$prevArticle="";
$prevNum="";
while ($row = mysqli_fetch_array($result)) {
     if ($row['Agent']!= $prevAgent) {
                   echo "<tr><td>".$row['Agent']."</td><td></td><td></td><td></td><td></td><td></td></tr>";
                                }
     if ($row['date']!= $prevDate) {
                   echo "<tr><td></td><td>".$row['date']."</td><td></td><td></td><td></td><td></td></tr>";
                                }
     if ($row['Operation']!= $prevOperation) {
                   echo "<tr><td></td><td></td><td>".$row['Operation']."</td><td></td><td></td><td></td></tr>";
                                }
     if ($row['Article']!= $prevArticle) {
                   echo "<tr><td></td><td></td><td></td><td>".$row['Article']."</td><td></td><td></td></tr>";
                                }
       if ($row['Num']!= $prevNum) {
                  echo "<tr><td></td><td></td><td></td><td></td><td>".$row['numLot']."</td><td>".$row['quantity']."</td></tr>";
                                }

  $prevAgent = $row['Agent'];
  $prevDate      = $row['date'];
  $prevOperation    = $row['operation'];
  $prevArticle      = $row['article'];
  $prevNum      = $row['num'];
      }
    endif; ?>
$prevAgent=”“;
$prevDate=“”;
$prevOperation=“”;
$prevaricle=“”;
$prevNum=“”;
while($row=mysqli\u fetch\u数组($result)){
如果($row['Agent']!=$prevAgent){
回显“$row['Agent']”;
}
如果($row['date']!=$prevDate){
回显“$row['date']”;
}
如果($row['Operation']!=$prevOperation){
回显“$row['Operation']”;
}
如果($row['Article']!=$prevArticle){
回显“$row['Article']”;
}
如果($row['Num']!=$prevNum){
回显“$row['numLot']”。$row['quantity']”;
}
$prevAgent=$row['Agent'];
$prevDate=$row['date'];
$prevOperation=$row['operation'];
$prevArticle=$row['article'];
$prevNum=$row['num'];
}
endif;?>

我已经为此绞尽脑汁好一阵子了。如何以以前的格式打印结果?

您需要执行两个层次移动:

$obj = [[
    "Agent" => "Albert",
    "Date" => "D1",
    "operation" => "SL1",
    "article" => "A",
    "num" => "0001",
    "quantity" => "300"
], [
    "Agent" => "Albert",
    "Date" => "D1",
    "operation" => "SL1",
    "article" => "A",
    "num" => "0002",
    "quantity" => "400"
], [
    "Agent" => "Albert",
    "Date" => "D3",
    "operation" => "SL2",
    "article" => "B",
    "num" => "00046",
    "quantity" => "100"
], [
    "Agent" => "Robert",
    "Date" => "D3",
    "operation" => "SL4",
    "article" => "A",
    "num" => "1231",
    "quantity" => "400"
], [
    "Agent" => "Robert",
    "Date" => "D3",
    "operation" => "SL5",
    "article" => "C",
    "num" => "888",
    "quantity" => "20"
], [
    "Agent" => "Robert",
    "Date" => "D2",
    "operation" => "SL3",
    "article" => "B",
    "num" => "9999",
    "quantity" => "90"
]];
$agent = [];
foreach ($obj as $val) {
    $agent[$val["Agent"]][] = $val;
}
$agentDate = [];
foreach ($agent as $agent => $val) {
    foreach ($val as $agDate => $value) {
        $agentDate[$agent][$value["Date"]] = $value;
    }
}
完成此操作后,您将以以下形式获得:

Array
(
  [Albert] => Array
    (
      [D1] => Array
        (
          [Agent] => Albert
          [Date] => D1
          [operation] => SL1
          [article] => A
          [num] => 0002
          [quantity] => 400
        )

      [D3] => Array
        (
          [Agent] => Albert
          [Date] => D3
          [operation] => SL2
          [article] => B
          [num] => 00046
          [quantity] => 100
        )

    )

  [Robert] => Array
    (
      [D3] => Array
        (
          [Agent] => Robert
          [Date] => D3
          [operation] => SL5
          [article] => C
          [num] => 888
          [quantity] => 20
        )

      [D2] => Array
        (
          [Agent] => Robert
          [Date] => D2
          [operation] => SL3
          [article] => B
          [num] => 9999
          [quantity] => 90
        )

    )

)
最后,如果你这样做:

foreach ($agentDate as $agent => $details) {
    echo "Agent: $agent\n";
    foreach ($details as $date => $value) {
        echo "\tDate: $date\n";
        echo "\t\tOperation: {$value["operation"]}\n";
        echo "\t\t\tARTICLE : {$value["article"]}\n";
        echo "\t\t\t\tnum : {$value["num"]}\n";
    }
}
您将获得以下输出:

$data=array();
$data[]=数组(
“代理”=>“阿尔伯特”,
“日期”=>“D1”,
“操作”=>“SL1”,
“文章”=>“A”,
'num'=>'0001',
“数量”=>“300”,
);
$data[]=数组(
“代理”=>“阿尔伯特”,
“日期”=>“D1”,
“操作”=>“SL1”,
“文章”=>“A”,
'num'=>'0002',
“数量”=>“400”,
);
$data[]=数组(
“代理”=>“阿尔伯特”,
“日期”=>“D3”,
“操作”=>“SL2”,
“条款”=>“B”,
'num'=>'00046',
“数量”=>“100”,
);
$data[]=数组(
“代理”=>“罗伯特”,
“日期”=>“D3”,
“操作”=>“SL4”,
“文章”=>“A”,
'num'=>'1231',
“数量”=>“400”,
);
$data[]=数组(
“代理”=>“罗伯特”,
“日期”=>“D3”,
“操作”=>“SL5”,
'条款'=>'C',
'num'=>'888',
“数量”=>“20”,
);
$data[]=数组(
“代理”=>“罗伯特”,
“日期”=>“D2”,
“操作”=>“SL3”,
“条款”=>“B”,
'num'=>'9999',
“数量”=>“90”,
);
//代理人
$filteredAgent=array();
foreach(数据为$value){
$filteredAgent[$value['Agent'][$value['Date'][$value['operation']][$value['article']]][]=$value;
}
回声“;
打印($filteredAgent);
foreach($filteredAgent作为$agent=>$agentData){
echo“Agent:$Agent”;
foreach($agentData作为$date=>$dateData){
回声“
”; echo“\t日期:$date”; foreach($dateData作为$operation=>$operationData){ 回声“
”; echo“\t\t操作:$operation”; foreach($operationData作为$article=>$articleData){ 回声“
”; echo“\t\t\tarticle:$article”; foreach($articleData作为$finalData){ 回声“
”; echo“\t\t\t\tnum:.$finalData['num']”数量:.$finalData['Quantity']; } } } } 回声“
”; }
您尝试的方式很好,只是需要正确引用字段名:它们区分大小写

$row['Date']
$row['Date']
是两个不同的东西,
$row['Num']
$row['numLot']
。。。等等


确保
if
条件、
echo
语句和
$prevXXXX
分配中的键相同。一旦您使用了查询生成的精确密钥,它就会工作。

您尝试了什么?请添加用于获取数据和输出数据的代码。此处应该会出现语法错误,如未定义索引中的语法错误。还请将数据库查询添加到问题中,并将调试结果添加为$result和/或$row。。。您当前只显示所需内容以及如何生成输出(html),而不显示如何获取数据。。。谢谢,我不知道我怎么才能迈出第一步,把它变成object@bpax51使用您要执行的
while
循环。如果您不懂PHP,我们将无法提供帮助。至少获取SQL DML和DDL查询,以便我们提供帮助。@bpax51您所拥有的是一种类似于表的东西,而您所要求的是一种文本输出。你想要表格输出还是文本输出?哇。。。太好了<代码>:D这比我的好。但问题是,OP不懂PHP。实际上它不是复制&过去的。我可以在几分钟内写出这种逻辑;-)谢谢你的补充非常感谢Ankit vadariya:)这很有魅力
$data = array();
$data [] = array(
    'Agent' => 'Albert',
    'Date' => 'D1',
    'operation' => 'SL1',
    'article' => 'A',
    'num' => '0001',
    'quantity' => '300',
);
$data [] = array(
    'Agent' => 'Albert',
    'Date' => 'D1',
    'operation' => 'SL1',
    'article' => 'A',
    'num' => '0002',
    'quantity' => '400',
);
$data [] = array(
    'Agent' => 'Albert',
    'Date' => 'D3',
    'operation' => 'SL2',
    'article' => 'B',
    'num' => '00046',
    'quantity' => '100',
);
$data [] = array(
    'Agent' => 'Robert',
    'Date' => 'D3',
    'operation' => 'SL4',
    'article' => 'A',
    'num' => '1231',
    'quantity' => '400',
);
$data [] = array(
    'Agent' => 'Robert',
    'Date' => 'D3',
    'operation' => 'SL5',
    'article' => 'C',
    'num' => '888',
    'quantity' => '20',
);
$data [] = array(
    'Agent' => 'Robert',
    'Date' => 'D2',
    'operation' => 'SL3',
    'article' => 'B',
    'num' => '9999',
    'quantity' => '90',
);

//Agent
$filteredAgent = array();
foreach ($data as $value) {
    $filteredAgent[$value['Agent']][$value['Date']][$value['operation']][$value['article']][] = $value;
}
echo "<pre>";
print_r($filteredAgent);

foreach ($filteredAgent as $agent => $agentData) {
    echo "Agent : $agent";
    foreach ($agentData as $date => $dateData) {
        echo "<br>";
        echo "\tDate : $date";
        foreach ($dateData as $operation => $operationData) {
            echo "<br>";
            echo "\t\tOperation : $operation";
            foreach ($operationData as $article => $articleData) {
                echo "<br>";
                echo "\t\t\tarticle : $article";
                foreach ($articleData as $finalData) {
                    echo "<br>";
                    echo "\t\t\t\tnum : " . $finalData['num'] . " | Quantity :" . $finalData['quantity'];
                }
            }
        }
    }
    echo "<br>";
}