2017-04-03 5 views
0

私は既にこれまでに同様の質問をしていましたが、私はそれを自分のコードに適合させようとしましたが、うまく機能しませんでした。PHPでテーブルを整理する

私は、私は次の手順を実行しようとしましたが、私はPRODUCTの変化を検出したときにPRODUCT合計を表示したいが、それは各PRODUCTの初めに私にTOTAL行を示し、PHPでテーブルを描画次のコードを持っていますそしてNORMALは動的で、GOLD

変数を集計しない、すなわちNORMALを持っていない他の人のようなGOLDを持っていないテーブルがあるかもしれない:

これは私のコードです:

<?php 

$harvest = Array ( 
     Array ( 
        Array ( 
            'PRODUCT' => 'ROSE' , 
            'VARIETY' => 'ADELE', 
            'GOLD' => 160, 
            'NORMAL' => 0 , 
            'TOTAL' => 160 
           ) , 
        Array ( 
            'PRODUCT' => 'ROSE', 
            'VARIETY' => 'ALESSO' , 
            'GOLD' => 1320 , 
            'NORMAL' => 550, 
            'TOTAL' => 1870 
           ) , 
        Array ( 
            'PRODUCT' => 'ROSE', 
            'VARIETY' => 'ANASTACIA' , 
            'GOLD' => 440 , 
            'NORMAL' => 150 , 
            'TOTAL' => 590 
           ), 
        Array ( 
            'PRODUCT' => 'ROSE1', 
            'VARIETY' => 'ANASTACIA1' , 
            'GOLD' => 420 , 
            'NORMAL' => 120 , 
            'TOTAL' => 540 
           ), 
        Array ( 
            'PRODUCT' => 'ROSE1', 
            'VARIETY' => 'ANASTACIA1', 
            'GOLD' => 440 , 
            'NORMAL' => 100 , 
            'TOTAL' => 540 
           ), 
        Array ( 
            'PRODUCT' => 'ROSE2', 
            'VARIETY' => 'ANASTACIA2', 
            'GOLD' => 640, 
            'NORMAL' => 0, 
            'TOTAL' => 640 
           ), 
        Array ( 
            'PRODUCT' => 'ROSE2', 
            'VARIETY' => 'ANASTACIA2' , 
            'GOLD' => 440, 
            'NORMAL' => 440, 
            'TOTAL' => 880 
            ) 
        ) 


    ); 

$arrayThead = array(); 
     for ($i=0; $i < count($harvest) ; $i++) { 
     array_push($arrayThead, array_keys($harvest[$i][0])); 
     } 

     $totalByProduct = array(); 
     foreach ($harvest as $items) { 
      foreach ($items as $item) { 
       if(!key_exists($item['PRODUCT'], $totalByProduct)){ 
        $totalByProduct[$item['PRODUCT']] = $item; 
        continue; 
       } 
       foreach ($arrayThead as $key => $values) { 
       foreach ($values as $th) { 
        if($th != 'PRODUCT' && $th != 'VARIETY'){ 
        $totalByProduct[$item['PRODUCT']][$th] += $item[$th]; 
        } 
       } 
       } 
      } 
     } 
     $arrayfoot= array(); 

     foreach ($harvest as $key => $value) { 
     foreach ($value as $harv) { 
      foreach ($arrayThead as $key => $values) { 
      foreach ($values as $th) { 
       if($th != 'PRODUCT' && $th != 'VARIETY'){ 
        $arrayfoot[$th] += $harv[$th]; 
       } 
      } 
      } 
     } 
     } 

     $arrayComplete = array(); 
     for ($i=0; $i < count($arrayThead) ; $i++) { 
     for ($j=0; $j < count($arrayThead[$i]) ; $j++) { 
      if($arrayThead[$i][$j] != 'PRODUCT' && $arrayThead[$i][$j] != 'VARIETY'){ 
      array_push($arrayComplete, $arrayThead[$i][$j]); 
      } 
     } 
     } 


     $arrayFinal = array(); 
     for ($j=0; $j < count($arrayComplete) ; $j++) { 
     array_push($arrayFinal, $arrayfoot[$arrayComplete[$j]]); 
     } 

     $body = '<table style="border: 1px solid black;border-collapse: collapse;width: 100%;font-family:Calibri;">'; 
     $body .= '<thead style="background-color:#f3f4f5;">'; 
     $body .= '<tr>'; 

     for ($i=0; $i < count($arrayThead) ; $i++) { 
     for ($j=0; $j < count($arrayThead[$i]) ; $j++) { 
      if($arrayThead[$i][$j] === 'PRODUCT' || $arrayThead[$i][$j] === 'VARIETY'){ 
      $body .= '<th style="border: 1px solid black;height:50px;">'.$arrayThead[$i][$j].'</th>'; 
      }else{ 
      $body .= '<th style="border: 1px solid black;height:50px;">'.$arrayThead[$i][$j].'</th>'; 
      } 
     } 
     } 
     $body .= '</tr>'; 
     $body .= '</thead>'; 
     $body .= '<tbody>'; 

//Initialize the variable product 
     $product = ""; 
     foreach ($harvest as $items) { 
      foreach ($items as $item) { 

//If the $product variable is different from the data product, print the total 

      if($product != $item['PRODUCT']){ 
       $body .= '<tr>'; 
       $body .= '<th style="border: 1px solid black;text-align:left;font-size:12px;">TOTAL '.$item['PRODUCT'].'</th>'; 
       $body .= '<th style="border: 1px solid black;text-align:left;font-size:12px;"></th>'; 

       foreach ($arrayThead as $key => $values) { 
       foreach ($values as $th) { 
        if($th != 'PRODUCT' && $th != 'VARIETY'){ 
        $body .= '<th style="border: 1px solid black;text-align:right;font-size:12px;">'.number_format($total).'</th>'; 
        } 
       } 
       } 
       $body .= '</tr>'; 
       $product = $item['PRODUCT']; 
      } 
      $body .= '<tr>'; 
      foreach ($arrayThead as $key => $values) { 
      foreach ($values as $th) { 
       if($th === 'PRODUCT' || $th === 'VARIETY'){ 
       $body .= '<td style="border: 1px solid black;font-size:12px;">'.$item[$th].'</td>'; 
       }else{ 
       $body .= '<td style="border: 1px solid black; text-align:right;font-size:12px;">'.number_format($item[$th]).'</td>'; 
       } 
      } 
      } 
      $body .= '</tr>'; 
      $product = $item['PRODUCT']; 
     } 
     } 

     $body .= '</tbody>'; 
     $body .= '<tfoot>'; 
     $body .= '<tr>'; 
     $body .= '<th style="border: 1px solid black;text-align:left;">TOTAL GENERAL</th>'; 
     $body .= '<th style="border: 1px solid black;"></th>'; 

     for ($i=0; $i < count($arrayFinal) ; $i++) { 
     $body .= '<th style="border: 1px solid black;text-align:right;">'.number_format($arrayFinal[$i]).'</th>'; 
     } 

     $body .= '</tr>'; 
     $body .= '</tfoot>'; 
     $body .= '</table>'; 

     echo $body; 

、それがどのように動作するかを確認するには、次のページにコードをコピーして貼り付けてください:

PHPTester

私は誰かが私を助けることができることを願っています。

+0

問題何このような何かを探していることができますか?コードの量を減らして[最小限の完全で検証可能な例](https://stackoverflow.com/help/mcve)を作成してください – k0pernikus

+0

PHPTesterのリンクにコードをコピーして貼り付けることができます。 @ k0pernikus –

+0

あなたはコミュニティの助けが必要です。だから、質問内に必要な情報を提供してください、私たちがあなたのために仕事をすることを期待しないでください。 – k0pernikus

答えて

0

あなたは

<? 
$harvest = Array ( 
    Array ( 
        'PRODUCT' => 'ROSE' , 
        'VARIETY' => 'ADELE', 
        'GOLD' => 160, 
        'NORMAL' => 0 , 
        'TOTAL' => 160 
       ) , 
    Array ( 
        'PRODUCT' => 'ROSE', 
        'VARIETY' => 'ALESSO' , 
        'GOLD' => 1320 , 
        'NORMAL' => 550, 
        'TOTAL' => 1870 
       ) , 
    Array ( 
        'PRODUCT' => 'ROSE', 
        'VARIETY' => 'ANASTACIA' , 
        'GOLD' => 440 , 
        'NORMAL' => 150 , 
        'TOTAL' => 590 
       ), 
    Array ( 
        'PRODUCT' => 'ROSE1', 
        'VARIETY' => 'ANASTACIA1' , 
        'GOLD' => 420 , 
        'NORMAL' => 120 , 
        'TOTAL' => 540 
       ), 
    Array ( 
        'PRODUCT' => 'ROSE1', 
        'VARIETY' => 'ANASTACIA1', 
        'GOLD' => 440 , 
        'NORMAL' => 100 , 
        'TOTAL' => 540 
       ), 
    Array ( 
        'PRODUCT' => 'ROSE2', 
        'VARIETY' => 'ANASTACIA2', 
        'GOLD' => 640, 
        'NORMAL' => 0, 
        'TOTAL' => 640 
       ), 
    Array ( 
        'PRODUCT' => 'ROSE2', 
        'VARIETY' => 'ANASTACIA2' , 
        'GOLD' => 440, 
        'NORMAL' => 440, 
        'TOTAL' => 880 
        ) 

); 


//You will endup with a products array indexed by product name 
$products = []; 

$general = Array('GOLD' => 0,'NORMAL' => 0, 'TOTAL' => 0); 
foreach ($harvest as $items) { 
    $general["GOLD"] += $items["GOLD"]; 
    $general["NORMAL"] += $items["NORMAL"]; 
    $general["TOTAL"] += $items["TOTAL"]; 
    if (array_key_exists($items["PRODUCT"],$products)){ 
     $products[$items["PRODUCT"]]["TOTALS"]["GOLD-TOTAL"] += $items["GOLD"]; 
     $products[$items["PRODUCT"]]["TOTALS"]["NORMAL-TOTAL"] += $items["NORMAL"]; 
     $products[$items["PRODUCT"]]["TOTALS"]["TOTAL"] += $items["TOTAL"]; 
     array_push($products[$items["PRODUCT"]],$items); 
    } 
    else{ 
     $totals=[]; 
     $totals["GOLD-TOTAL"] = 0; 
     $totals["NORMAL-TOTAL"] = 0; 
     $totals["TOTAL"] = 0; 
     $totals["NAME"] = $items["PRODUCT"]; 
     $products[$items["PRODUCT"]]=[$items]; 
     $products[$items["PRODUCT"]]["TOTALS"] = $totals; 
    } 
} 

?>

<table> 
<thead> 
    <th>PRODUCT</th> 
    <th>VARIETY</th> 
    <th>GOLD</th> 
    <th>NORMAL</th> 
    <th>TOTAL</th> 
</thead> 
<tbody> 
    <?foreach ($products as $product) { 
     foreach ($product as $item){ 
      if (array_key_exists("PRODUCT",$item)){ 
    ?> 

    <tr> 
     <td><?print($item["PRODUCT"])?></td> 
     <td><?print($item["VARIETY"])?></td> 
     <td><?print($item["GOLD"])?></td> 
     <td><?print($item["NORMAL"])?></td> 
     <td><?print($item["TOTAL"])?></td> 
    </tr> 
    <?}}?> 
    <tr> 
     <td>Total <? print($product["TOTALS"]["NAME"])?></td> 
     <td></td> 
     <td><? print($product["TOTALS"]["GOLD-TOTAL"])?></td> 
     <td><? print($product["TOTALS"]["NORMAL-TOTAL"])?></td> 
     <td><? print($product["TOTALS"]["TOTAL"])?></td> 
    </tr> 
    <?}?> 
    <tr> 
     <td>TOTAL GENERAL</td> 
     <td></td> 
     <td><?print($general["GOLD"])?></td> 
     <td><?print($general["NORMAL"])?></td> 
     <td><?print($general["TOTAL"])?></td> 
    </tr> 
</tbody> 
</table> 
+0

このページで試しましたか? PHPTester http://phptester.net/ –

+0

私のコードの代わりにこのコードを試してみてください。http://sandbox.onlinephpfunctions.com/ –

+0

ok私はあなたのコードをチェックしています。私は自分の答えを編集します –

関連する問題