2016-12-26 35 views
-2

我有一個mysqli的查詢返回以下結果:打印的mysqli結果在一個格式化的HTML表

+--------+------+-----------+---------+-------+----------+ 
| 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 | 
+--------+------+-----------+---------+-------+----------+ 

查詢定貨時AGENT ASC, DATE ASC, Operation ASC, ARTCLE 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 

我試過做這種方式,但它沒有工作:

$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; ?> 

我一直在爲此奮鬥一段時間。如何以前面的格式打印結果?

+0

你有什麼試過?請添加您獲取數據並輸出的代碼。 – trincot

+0

你應該在這裏得到語法錯誤,就像在未定義的索引中一樣。 –

+0

也請將數據庫查詢添加到您的問題以及$ result和/或$ row的調試結果中......您目前只顯示您想要的內容以及如何生成輸出(html),但不知道如何獲取數據......謝謝 –

回答

-2
$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>"; 
} 
+0

哇...太棒了! ':D'這比我好。但問題是,OP不知道PHP。 –

+0

其實它不是複製和過去。我可以在幾分鐘內寫出這種類型的邏輯;-) 感謝您的補充 –

+1

非常感謝Ankit vadariya :)這工作像魅力 – bpax51

1

你需要做兩個層次招式:

$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"; 
    } 
} 

您將得到的輸出爲:

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 
+0

我看不到我該如何做第一步並將其轉換爲對象 – bpax51

+0

@ bpax51使用while循環,你會這樣做。如果您不知道PHP,我們將無法提供幫助。至少得到SQL DML和DDL查詢,所以我們可以提供幫助。 –

+0

@ bpax51你所擁有的是一種表格類型的東西,你問的是文本輸出。你想要一個表格輸出還是一個文本輸出? –

1

你試過它是好的,它只是需要正確引用字段名的方式:他們是區分大小寫的。

$row['Date']$row['date']是兩回事,所以是$row['Num']$row['numLot'] ...等

確保密鑰在if條件相同,在echo語句和$prevXXXX分配。一旦你使用了查詢生成的確切鍵,它就可以工作。