2017-03-24 34 views
7

日安指定coloumn,分組行由陣列

我有這樣的陣列

Array 
(
    [0] => stdClass Object 
     (
      [TransactionNo] => OPM-EC-K-LFMCD2-21.4 
      [StokOpnameTransNo] => OPM-EC-K-LFMCD2-21 
      [ItemCode] => BBG150400005 
      [ItemName] => BIG BAG 
      [OriginalPrice] => 289900.00 
      [Price] => 289900.00 
      [QtyBegining] => 0 
      [QtyIn] => 4 
      [QtySales] => 0 
      [QtyMutasi] => 0 
      [QtyStock] => 4 
      [QtyOpname] => 0 
      [QtyAdjust] => -4 
      [TotalAdjust] => -1159600.00 
      [rak] => 
      [line] => 
      [TransDate] => 2017-03-31 10:46:00.000 
      [CustomerCode] => K-LFMCD2 
      [CreatedBy] => 1208496. 
      [Remark] => re 
      [Remark2] => re 
      [SOTerakhir] => 
      [TglSoTerakhir] => 
     ) 

    [1] => stdClass Object 
     (
      [TransactionNo] => OPM-EC-K-LFMCD2-21.5 
      [StokOpnameTransNo] => OPM-EC-K-LFMCD2-21 
      [ItemCode] => BBG150500063 
      [ItemName] => BIG BAG 
      [OriginalPrice] => 479900.00 
      [Price] => 479900.00 
      [QtyBegining] => 0 
      [QtyIn] => 0 
      [QtySales] => 0 
      [QtyMutasi] => 0 
      [QtyStock] => 0 
      [QtyOpname] => 1 
      [QtyAdjust] => 0 
      [TotalAdjust] => .00 
      [rak] => SS 
      [line] => SS 
      [TransDate] => 2017-03-31 10:46:00.000 
      [CustomerCode] => K-LFMCD2 
      [CreatedBy] => 1208496. 
      [Remark] => re 
      [Remark2] => re 
      [SOTerakhir] => 
      [TglSoTerakhir] => 
     ) 

    [2] => stdClass Object 
     (
      [TransactionNo] => OPM-EC-K-LFMCD2-21.5 
      [StokOpnameTransNo] => OPM-EC-K-LFMCD2-21 
      [ItemCode] => BBG150500063 
      [ItemName] => BIG BAG 
      [OriginalPrice] => 479900.00 
      [Price] => 479900.00 
      [QtyBegining] => 0 
      [QtyIn] => 1 
      [QtySales] => 0 
      [QtyMutasi] => 0 
      [QtyStock] => 1 
      [QtyOpname] => 0 
      [QtyAdjust] => 0 
      [TotalAdjust] => .00 
      [rak] => 
      [line] => 
      [TransDate] => 2017-03-31 10:46:00.000 
      [CustomerCode] => K-LFMCD2 
      [CreatedBy] => 1208496. 
      [Remark] => re 
      [Remark2] => re 
      [SOTerakhir] => 
      [TglSoTerakhir] => 
     ) 

    [3] => stdClass Object 
     (
      [TransactionNo] => OPM-EC-K-LFMCD2-21.6 
      [StokOpnameTransNo] => OPM-EC-K-LFMCD2-21 
      [ItemCode] => BBG150500081 
      [ItemName] => BIG BAG 
      [OriginalPrice] => 229900.00 
      [Price] => 229900.00 
      [QtyBegining] => 0 
      [QtyIn] => 0 
      [QtySales] => 0 
      [QtyMutasi] => 0 
      [QtyStock] => 0 
      [QtyOpname] => 1 
      [QtyAdjust] => 0 
      [TotalAdjust] => .00 
      [rak] => SS 
      [line] => SS 
      [TransDate] => 2017-03-31 10:46:00.000 
      [CustomerCode] => K-LFMCD2 
      [CreatedBy] => 1208496. 
      [Remark] => re 
      [Remark2] => re 
      [SOTerakhir] => 
      [TglSoTerakhir] => 
     ) 

) 

我陣列(S)從查詢結果正在添加。然後我試圖把它放到HTML表,所以我嘗試這種方式。

<table class="table "> 
        <thead> 
         <tr> 
          <th>No</th> 
          <th>ItemCode</th> 
          <th>ItemName</th> 
          <th>TransNo</th> 
          <th>Original Price</th> 
          <th>Price</th> 
          <th>QtyBeginning</th> 
          <th>QtyIn</th> 
          <th>QtySales</th> 
          <th>QtyMutasi</th> 
          <th>QtyStock</th> 
          <th>QtyOpname</th> 
          <th>QtyAdjust</th> 
          <th>TotalAdjust</th> 
          <th>Rak</th> 
          <th>Line</th> 
         </tr> 
        </thead> 
        <tbody> <?php $x=0; foreach ($datadetail as $data) { $x++;?> 
           <tr> 
            <td><?=$x;?></td> 
            <td><?=$data->ItemCode;?></td> 
            <td><?=$data->ItemName;?></td> 
            <td><?=$data->StokOpnameTransNo;?></td> 
            <td><?=$data->OriginalPrice;?></td> 
            <td><?=$data->Price;?></td> 
            <td><?=$data->QtyBegining;?></td> 
            <td><?=$data->QtyIn;?></td> 
            <td><?=$data->QtySales;?></td> 
            <td><?=$data->QtyMutasi;?></td> 
            <td><?=$data->QtyStock;?></td> 
            <td><?=$data->QtyOpname;?></td> 
            <td><?=$data->QtyAdjust;?></td> 
            <td><?=currency($data->TotalAdjust);?></td> 
            <td><?=$data->rak;?></td> 
            <td><?=$data->line;?></td> 
           </tr> 
          <?php } ?> 

        </tbody> 

      </table> 

結果只是一個這樣的簡單表格。展示我的桌子時沒有問題。但是,我想改變的結果(HTML),以這樣的

enter image description here

它就像由ItemCode分組。所以在每個項目代碼之後,我想總結QtyBeginning,QtyIn,QtyOut etc。對不起,我的英語不好

回答

-1

你可以使用

​​
0

首先我工作提高我的英語。

第二:我有這個問題的解決方案,試試這個我希望得到一些幫助。 理念 - >我嘗試通過SQL陣列回報比較項目代碼(您可以通過遞增順序排序mutch Itemcode

那就試試這個代碼 PHP代碼

<?php 
class Item{ 
    protected $data; 

    public function _construct($itemData){ 
     $_arr = array(
      'QtyBegining' => $itemData->QtyBegining, 
      'QtyIn'   => $itemData->QtyIn, 
      'QtySales'  => $itemData->QtySales, 
      'QtyStock'  => $itemData->QtyStock, 
      'QtyOpname'  => $itemData->QtyOpname, 
      'QtyAdjust'  => $itemData->QtyAdjust, 
      'TotalAdjust' => $itemData->TotalAdjust 
     ) 
     $this->data = $_arr; 
    } 

    public function setData($key, $value){ 
     $this->data[$key] = $value; 
    } 

    public function getData($key){ 
     return $this->data[$key]; 
    } 


    public $QtyBegining; 
    public $QtyIn; 
    public $QtySales; 
    public $QtyStock; 
    public $QtyOpname; 
    public $QtyAdjust; 
    public $TotalAdjust; 
} 
?> 

<tbody> 
    <?php $x=0; 
    $revertItemcode = null; 
    $revertSum = null; 
    foreach ($datadetail as $data) 
    { 
     $hasNewItemcode = false; 
     if($revertItemcode == null) { 

      //If first Item 
      $revertItemcode = $data->ItemCode; 

      //Set revert itemcode to new Itemcode 
      $revertSum = new Item($data); 
     }else{ 
      //If have not equa with revert item code 
      if($revertItemcode != $data->ItemCode;){ 
       $hasNewItemcode = true; 
      } 
     } 

     //Sum with revert item if equa Itemcode 
     if(!$hasNewItemcode){ 

      $revertSum->setData('QtyBegining', $revertSum->getData('QtyBegining') + $data->QtyBegining); 

      $revertSum->setData('QtyIn', $revertSum->getData('QtyIn') + $data->QtyIn); 

      $revertSum->setData('QtySales', $revertSum->getData('QtySales') + $data->QtySales); 

      $revertSum->setData('QtyStock', $revertSum->getData('QtyStock') + $data->QtyStock); 

      $revertSum->setData('QtyOpname', $revertSum->getData('QtyOpname') + $data->QtyOpname); 

      $revertSum->setData('QtyAdjust', $revertSum->getData('QtyAdjust') + $data->QtyAdjust); 

      $revertSum->setData('TotalAdjust', $revertSum->getData('revertSum') + $data->TotalAdjust);    
     } 
     $x++; 
    ?> 
     <?php 
     //Echo sumary row with revert item code. 
     if($hasNewItemcode):?> 
     <tr class="sumary-item-code"> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
      <td><?=$revertSum->getData('QtyBegining');?></td> 
      <td><?=$revertSum->getData('QtyIn');?></td> 
      <td><?=$revertSum->getData('QtySales');?></td> 
      <td><?=$revertSum->getData('QtyMutasi');?></td> 
      <td><?=$revertSum->getData('QtyStock');?></td> 
      <td><?=$revertSum->getData('QtyOpname');?></td> 
      <td><?=$revertSum->getData('QtyAdjust');?></td> 
      <td><?=currency($revertSum->getData('TotalAdjust'));?></td> 
      <td>&nbsp;</td> 
      <td>&nbsp;</td> 
     </tr> 
     <?php 
     //Set revert itemcode to new Itemcode 
     $revertSum = new Item($data); 
     ?> 
     <?php endif;?> 
     <tr> 
      <td><?=$x;?></td> 
      <td><?=$data->ItemCode;?></td> 
      <td><?=$data->ItemName;?></td> 
      <td><?=$data->StokOpnameTransNo;?></td> 
      <td><?=$data->OriginalPrice;?></td> 
      <td><?=$data->Price;?></td> 
      <td><?=$data->QtyBegining;?></td> 
      <td><?=$data->QtyIn;?></td> 
      <td><?=$data->QtySales;?></td> 
      <td><?=$data->QtyMutasi;?></td> 
      <td><?=$data->QtyStock;?></td> 
      <td><?=$data->QtyOpname;?></td> 
      <td><?=$data->QtyAdjust;?></td> 
      <td><?=currency($data->TotalAdjust);?></td> 
      <td><?=$data->rak;?></td> 
      <td><?=$data->line;?></td> 
     </tr> 
    <?php } ?> 

</tbody> 
+0

你的代碼對我很有幫助。我會試一試 – YVS1102

+0

對不起,我有點混亂。我正在使用codeigniter。我應該在哪裏放置類項目? – YVS1102

+0

任何地方你都可以,我不知道Codeigniter,但我認爲你可以從模型或幫手定義類 – HoangHieu

0

。 @ YVS1102 首先,您需要安排您的數據(關聯陣列),以便您可以按照您的要求進行循環。

foreach($datadetail as $k=>$v){ 
     $result[$v->ItemCode][] = $v; 
    } 

現在在視圖中,您可以循環如下

$i=0; 
    foreach($result as $key=>$value){ 
     $i++; 
     $j= $qtyBegining = $qtyIn = $qtySale = $qtyMutasi = $qtyStock = $qtyOpname = $qtAdjust = $totalAdjust = 0; 
     /** we can use foreach also however we need to calculate the Qty so we will use for **/   

     for($k=0;$k<=(count($value));$k++){ 
      <tr> 
       <?php if($j==0){?> 
        <td rowspan="<?php echo count($value)+1;?>"><?php echo $i;?></td>  
        <td rowspan="<?php echo count($value)+1;?>"><?php echo $value[$k]->ItemCode;?></td>  
        <td rowspan="<?php echo count($value)+1;?>"><?php echo $value[$k]->ItemName;?></td>  
       <?php }?> 
        <?php if(isset($value[$k]) && !empty($value[$k])){ 
         $qtyBegining = $qtyBegining + $value[$k]->QtyBegining; 
         $qtyIn = $qtyIn + $value[$k]->QtyIn; 
         $qtySale = $qtySale + $value[$k]->QtySales; 
         $qtyMutasi = $qtyMutasi + $value[$k]->QtyMutasi; 
         $qtyStock = $qtyStock + $value[$k]->QtyStock; 
         $qtyOpname = $qtyOpname + $value[$k]->QtyOpname; 
         $qtAdjust = $qtAdjust + $value[$k]->QtyAdjust; 
         $totalAdjust = $totalAdjust + $value[$k]->TotalAdjust; 
        }?> 
        <td><?php echo ($k == count($value) ? ' ' : $value[$k]->StokOpnameTransNo ;?></td> 
        <td><?php echo ($k == count($value) ? ' ' : $value[$k]->OriginalPrice ;?></td> 
        <td><?php echo ($k == count($value) ? ' ' : $value[$k]->Price ;?></td> 
        <td><?php echo ($k == count($value) ? $qtyBegining : $value[$k]->QtyBegining ;?></td> 
        <td><?php echo ($k == count($value) ? $qtyIn : $value[$k]->QtyIn ;?></td> 
        <td><?php echo ($k == count($value) ? $qtySale : $value[$k]->QtySales ;?></td> 
        <td><?php echo ($k == count($value) ? $qtyMutasi : $value[$k]->QtyMutasi ;?></td> 
        <td><?php echo ($k == count($value) ? $qtyStock : $value[$k]->QtyStock ;?></td> 
        <td><?php echo ($k == count($value) ? $qtyOpname : $value[$k]->QtyOpname ;?></td> 
        <td><?php echo ($k == count($value) ? $qtAdjust : $value[$k]->QtyAdjust ;?></td> 
        <td><?php echo ($k == count($value) ? $totalAdjust : currency($value[$k]->TotalAdjust) ;?></td> 
        <td><?php echo ($k == count($value) ? ' ' : $value[$k]->rak ;?></td> 
        <td><?php echo ($k == count($value) ? ' ' : $value[$k]->line ;?></td> 

      </tr> 
      $j++; 
      } 
     } 

你不需要在上面的方法來創建新類。

+0

是的,我同意你不需要創建一個新的類,但是一個擁有你擁有的數據的類更清潔的代碼。對我來說,這有效,但看起來「醜陋」。 – Chococroc

+0

根據我的理解@YVS1102正在通過codeigniter活動記錄從數據庫獲取數據(數據已經是對象格式)。我們只是將它保存到數組中並將數組循環到視圖中。然而,在新類方法中,我們試圖再次將相同的數據分配給另一個類對象。 – shafiq

+0

是的,沒錯。但是,如果在新類中使用該類,則可以輕鬆地將格式設置爲數字,並將空值設置爲輕鬆返回。而且你在所有的應用程序中保存統一的數據格式,以防萬一你想在其他視圖中再次顯示這些數據(你不必編寫和記住每行使用的所有函數)。 – Chococroc

1

我不知道你的表結構,但在我看來,你應該能夠從你的數據庫

不管怎麼樣,我試圖告訴你一個方法如何做到這一點(一fulltestscript)

組織數據TESTDATA:

$arrTestData = []; 

$obj = new stdClass(); 
$obj->TransactionNo = "OPM-EC-K-LFMCD2-21.4"; 
$obj->StokOpnameTransNo = "OPM-EC-K-LFMCD2-21"; 
$obj->ItemCode = "BBG150400005"; 
$obj->ItemName = "BIG BAG"; 
$obj->OriginalPrice = "289900.00"; 
$obj->Price = "289900.00"; 
$obj->QtyBegining = "0"; 
$obj->QtyIn = "4"; 
$obj->QtySales = "0"; 
$obj->QtyMutasi = "0"; 
$obj->QtyStock = "4"; 
$obj->QtyOpname = "2"; 
$obj->QtyAdjust = "-4"; 
$obj->TotalAdjust = "-1159600.00"; 
$obj->rak = ""; 
$obj->line = ""; 
$obj->TransDate = "2017-03-31 10:46:00.000"; 
$obj->CustomerCode = "K-LFMCD2"; 
$obj->CreatedBy = "1208496."; 
$obj->Remark = "re"; 
$obj->Remark2 = "re"; 
$obj->SOTerakhir = ""; 
$obj->TglSoTerakhir = ""; 
$arrTestData[] = $obj; 

$obj = new stdClass(); 
$obj->TransactionNo = "OPM-EC-K-LFMCD2-21.4"; 
$obj->StokOpnameTransNo = "OPM-EC-K-LFMCD2-21"; 
$obj->ItemCode = "BBG150400005"; 
$obj->ItemName = "BIG BAG"; 
$obj->OriginalPrice = "289900.00"; 
$obj->Price = "289900.00"; 
$obj->QtyBegining = "0"; 
$obj->QtyIn = "2"; 
$obj->QtySales = "0"; 
$obj->QtyMutasi = "0"; 
$obj->QtyStock = "4"; 
$obj->QtyOpname = "4"; 
$obj->QtyAdjust = "-4"; 
$obj->TotalAdjust = "-1159600.00"; 
$obj->rak = ""; 
$obj->line = ""; 
$obj->TransDate = "2017-03-31 10:46:00.000"; 
$obj->CustomerCode = "K-LFMCD2"; 
$obj->CreatedBy = "1208496."; 
$obj->Remark = "re"; 
$obj->Remark2 = "re"; 
$obj->SOTerakhir = ""; 
$obj->TglSoTerakhir = ""; 
$arrTestData[] = $obj; 

$obj = new stdClass(); 

$obj->TransactionNo = "OPM-EC-K-LFMCD2-21.5"; 
$obj->StokOpnameTransNo = "OPM-EC-K-LFMCD2-21"; 
$obj->ItemCode = "BBG150500063"; 
$obj->ItemName = "BIG BAG"; 
$obj->OriginalPrice = "479900.00"; 
$obj->Price = "479900.00"; 
$obj->QtyBegining = "0"; 
$obj->QtyIn = "0"; 
$obj->QtySales = "0"; 
$obj->QtyMutasi = "0"; 
$obj->QtyStock = "0"; 
$obj->QtyOpname = "1"; 
$obj->QtyAdjust = "0"; 
$obj->TotalAdjust = ".00"; 
$obj->rak = "SS"; 
$obj->line = "SS"; 
$obj->TransDate = "2017-03-31 10:46:00.000"; 
$obj->CustomerCode = "K-LFMCD2"; 
$obj->CreatedBy = "1208496."; 
$obj->Remark = "re"; 
$obj->Remark2 = "re"; 
$obj->SOTerakhir = ""; 
$obj->TglSoTerakhir = ""; 
$arrTestData[] = $obj; 

$obj = new stdClass(); 

$obj->TransactionNo = "OPM-EC-K-LFMCD2-21.5"; 
$obj->StokOpnameTransNo = "OPM-EC-K-LFMCD2-21"; 
$obj->ItemCode = "BBG150500063"; 
$obj->ItemName = "BIG BAG"; 
$obj->OriginalPrice = "479900.00"; 
$obj->Price = "479900.00"; 
$obj->QtyBegining = "0"; 
$obj->QtyIn = "1"; 
$obj->QtySales = "0"; 
$obj->QtyMutasi = "0"; 
$obj->QtyStock = "1"; 
$obj->QtyOpname = "0"; 
$obj->QtyAdjust = "0"; 
$obj->TotalAdjust = ".00"; 
$obj->rak = ""; 
$obj->line = ""; 
$obj->TransDate = "2017-03-31 10:46:00.000"; 
$obj->CustomerCode = "K-LFMCD2"; 
$obj->CreatedBy = "1208496."; 
$obj->Remark = "re"; 
$obj->Remark2 = "re"; 
$obj->SOTerakhir = ""; 
$obj->TglSoTerakhir = ""; 
$arrTestData[] = $obj; 

$obj = new stdClass(); 

$obj->TransactionNo = "OPM-EC-K-LFMCD2-21.6"; 
$obj->StokOpnameTransNo = "OPM-EC-K-LFMCD2-21"; 
$obj->ItemCode = "BBG150500081"; 
$obj->ItemName = "BIG BAG"; 
$obj->OriginalPrice = "229900.00"; 
$obj->Price = "229900.00"; 
$obj->QtyBegining = "0"; 
$obj->QtyIn = "0"; 
$obj->QtySales = "0"; 
$obj->QtyMutasi = "0"; 
$obj->QtyStock = "0"; 
$obj->QtyOpname = "1"; 
$obj->QtyAdjust = "0"; 
$obj->TotalAdjust = ".00"; 
$obj->rak = "SS"; 
$obj->line = "SS"; 
$obj->TransDate = "2017-03-31 10:46:00.000"; 
$obj->CustomerCode = "K-LFMCD2"; 
$obj->CreatedBy = "1208496."; 
$obj->Remark = "re"; 
$obj->Remark2 = "re"; 
$obj->SOTerakhir = ""; 
$obj->TglSoTerakhir = ""; 
$arrTestData[] = $obj; 

你需要一個項目集合或類似的持有的東西,structurize數據

class ItemCollection extends ArrayObject 
{ 

    private $strCollectionCode; 
    private $strCollectionName; 

    public function addItem($objItem) 
    { 
     $this->strCollectionCode = $objItem->ItemCode; 
     $this->strCollectionName = $objItem->ItemName; 
     $this->append($objItem); 
    } 

    public function get($key) 
    { 
     return $this->$key; 
    } 

    public function getSummaries($strKey) 
    { 
     $floatNumber = 0; 
     foreach($this AS $objItem) 
     { 
      $floatNumber += floatval($objItem->$strKey); 
     } 
     return $floatNumber; 
    } 
} 

而一個包裝應包含該集合

class ItemCollectionWrapper 
{ 
    private $arrCollections = array(); 

    public function __construct($arrData = false) 
    { 
     if (is_array($arrData)) 
     { 
      $this->addItemsFromArray($arrData); 
     } 
    } 

    public function addItem($objItem) 
    { 
     if (isset($this->arrCollections[$objItem->ItemCode])) 
     { 
      $objCollection = $this->arrCollections[$objItem->ItemCode]; 
     } 
     else 
     { 
      $objCollection = new ItemCollection(); 
      $this->arrCollections[$objItem->ItemCode] = $objCollection; 
     } 

     $objCollection->addItem($objItem); 
    } 

    public function addItemsFromArray($arrData) 
    { 
     foreach($arrData AS $obj) 
     { 
      $this->addItem($obj); 
     } 
    } 

    public function getCollections() 
    { 
     return $this->arrCollections; 
    } 
} 

,最終我們認爲

<?php 
    $obj = new ItemCollectionWrapper($arrTestData); 

?> 
<!DOCTYPE html> 
<html lang=en> 
<head> 
    <meta charset=utf-8> 
    <meta content="IE=edge" http-equiv=X-UA-Compatible> 
    <!-- Latest compiled and minified CSS --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 

    <!-- Optional theme --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 

    <!-- Latest compiled and minified JavaScript --> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> 
</head> 
<body> 
<style type="text/css"> 
    td.summaries 
    { 
     background:#c6c600; 
    } 
</style> 
<table class="table"> 
<thead> 
    <tr> 
     <th>No</th> 
     <th>ItemCode</th> 
     <th>ItemName</th> 
     <th>TransNo</th> 
     <th>Original Price</th> 
     <th>Price</th> 
     <th>QtyBeginning</th> 
     <th>QtyIn</th> 
     <th>QtySales</th> 
     <th>QtyMutasi</th> 
     <th>QtyStock</th> 
     <th>QtyOpname</th> 
     <th>QtyAdjust</th> 
     <th>TotalAdjust</th> 
     <th>Rak</th> 
     <th>Line</th> 
    </tr> 
</thead> 
<tbody> 
<?php 
foreach($obj->getCollections() AS $objCollection) 
{ 
    $number = 1; 
?> 
    <?php 
    foreach($objCollection AS $key => $objItem) : 
    ?> 
    <tr> 
     <?php 
     if ($key == 0) : 
     ?> 
     <td rowspan="<?=$objCollection->count();?>"><?=$number;?></td> 
     <td rowspan="<?=$objCollection->count();?>"><?=$objCollection->get("strCollectionCode");?></td> 
     <td rowspan="<?=$objCollection->count();?>"><?=$objCollection->get("strCollectionName");?></td> 
     <?php endif; ?> 
     <td><?=$objItem->StokOpnameTransNo;?></td> 
     <td><?=$objItem->OriginalPrice;?></td> 
     <td><?=$objItem->Price;?></td> 
     <td><?=$objItem->QtyBegining;?></td> 
     <td><?=$objItem->QtyIn;?></td> 
     <td><?=$objItem->QtySales;?></td> 
     <td><?=$objItem->QtyMutasi;?></td> 
     <td><?=$objItem->QtyStock;?></td> 
     <td><?=$objItem->QtyOpname;?></td> 
     <td><?=$objItem->QtyAdjust;?></td> 
     <td><?=($objItem->TotalAdjust);?></td> 
     <td><?=$objItem->rak;?></td> 
     <td><?=$objItem->line;?></td> 
    </tr> 
    <?php 
    endforeach; 
    ?> 
    <tr> 
     <td colspan="6"></td> 
     <td class="summaries"><?=$objCollection->getSummaries("QtyBegining");?></td> 
     <td class="summaries"><?=$objCollection->getSummaries("QtyIn");?></td> 
     <td class="summaries"><?=$objCollection->getSummaries("QtySales");?></td> 
     <td class="summaries"><?=$objCollection->getSummaries("QtyMutasi");?></td> 
     <td class="summaries"><?=$objCollection->getSummaries("QtyStock");?></td> 
     <td class="summaries"><?=$objCollection->getSummaries("QtyOpname");?></td> 
     <td class="summaries"><?=$objCollection->getSummaries("QtyAdjust");?></td> 
     <td class="summaries"><?=$objCollection->getSummaries("TotalAdjust");?></td> 
     <td colspan="2"></td> 
    </tr> 
<?php 
    $number++; 
} 
?> 
</tbody> 
</table> 
</body> 
</html> 

我希望它能幫助 - 如果你研究這個代碼 - 你應該能夠將其以任何方式擴展你喜歡。

順便說一句:你可以把類ItemCollectionWrapper和ItemCollection下方的型號代碼 如果你不知道該怎麼做 - 讓我看看你的模型和控制器,我會告訴你的。

0

示例數據:由於用於測試數據@sintakonte現在

$arrTestData = []; 

    $obj = new stdClass(); 
    $obj->TransactionNo = "OPM-EC-K-LFMCD2-21.4"; 
    $obj->StokOpnameTransNo = "OPM-EC-K-LFMCD2-21"; 
    $obj->ItemCode = "BBG150400005"; 
    $obj->ItemName = "BIG BAG"; 
    $obj->OriginalPrice = "289900.00"; 
    $obj->Price = "289900.00"; 
    $obj->QtyBegining = "0"; 
    $obj->QtyIn = "4"; 
    $obj->QtySales = "0"; 
    $obj->QtyMutasi = "0"; 
    $obj->QtyStock = "4"; 
    $obj->QtyOpname = "2"; 
    $obj->QtyAdjust = "-4"; 
    $obj->TotalAdjust = "-1159600.00"; 
    $obj->rak = ""; 
    $obj->line = ""; 
    $obj->TransDate = "2017-03-31 10:46:00.000"; 
    $obj->CustomerCode = "K-LFMCD2"; 
    $obj->CreatedBy = "1208496."; 
    $obj->Remark = "re"; 
    $obj->Remark2 = "re"; 
    $obj->SOTerakhir = ""; 
    $obj->TglSoTerakhir = ""; 
    $arrTestData[] = $obj; 

    $obj = new stdClass(); 
    $obj->TransactionNo = "OPM-EC-K-LFMCD2-21.4"; 
    $obj->StokOpnameTransNo = "OPM-EC-K-LFMCD2-21"; 
    $obj->ItemCode = "BBG150400005"; 
    $obj->ItemName = "BIG BAG"; 
    $obj->OriginalPrice = "289900.00"; 
    $obj->Price = "289900.00"; 
    $obj->QtyBegining = "0"; 
    $obj->QtyIn = "2"; 
    $obj->QtySales = "0"; 
    $obj->QtyMutasi = "0"; 
    $obj->QtyStock = "4"; 
    $obj->QtyOpname = "4"; 
    $obj->QtyAdjust = "-4"; 
    $obj->TotalAdjust = "-1159600.00"; 
    $obj->rak = ""; 
    $obj->line = ""; 
    $obj->TransDate = "2017-03-31 10:46:00.000"; 
    $obj->CustomerCode = "K-LFMCD2"; 
    $obj->CreatedBy = "1208496."; 
    $obj->Remark = "re"; 
    $obj->Remark2 = "re"; 
    $obj->SOTerakhir = ""; 
    $obj->TglSoTerakhir = ""; 
    $arrTestData[] = $obj; 

    $obj = new stdClass(); 

    $obj->TransactionNo = "OPM-EC-K-LFMCD2-21.5"; 
    $obj->StokOpnameTransNo = "OPM-EC-K-LFMCD2-21"; 
    $obj->ItemCode = "BBG150500063"; 
    $obj->ItemName = "BIG BAG"; 
    $obj->OriginalPrice = "479900.00"; 
    $obj->Price = "479900.00"; 
    $obj->QtyBegining = "0"; 
    $obj->QtyIn = "0"; 
    $obj->QtySales = "0"; 
    $obj->QtyMutasi = "0"; 
    $obj->QtyStock = "0"; 
    $obj->QtyOpname = "1"; 
    $obj->QtyAdjust = "0"; 
    $obj->TotalAdjust = ".00"; 
    $obj->rak = "SS"; 
    $obj->line = "SS"; 
    $obj->TransDate = "2017-03-31 10:46:00.000"; 
    $obj->CustomerCode = "K-LFMCD2"; 
    $obj->CreatedBy = "1208496."; 
    $obj->Remark = "re"; 
    $obj->Remark2 = "re"; 
    $obj->SOTerakhir = ""; 
    $obj->TglSoTerakhir = ""; 
    $arrTestData[] = $obj; 

    $obj = new stdClass(); 

    $obj->TransactionNo = "OPM-EC-K-LFMCD2-21.5"; 
    $obj->StokOpnameTransNo = "OPM-EC-K-LFMCD2-21"; 
    $obj->ItemCode = "BBG150500063"; 
    $obj->ItemName = "BIG BAG"; 
    $obj->OriginalPrice = "479900.00"; 
    $obj->Price = "479900.00"; 
    $obj->QtyBegining = "0"; 
    $obj->QtyIn = "1"; 
    $obj->QtySales = "0"; 
    $obj->QtyMutasi = "0"; 
    $obj->QtyStock = "1"; 
    $obj->QtyOpname = "0"; 
    $obj->QtyAdjust = "0"; 
    $obj->TotalAdjust = ".00"; 
    $obj->rak = ""; 
    $obj->line = ""; 
    $obj->TransDate = "2017-03-31 10:46:00.000"; 
    $obj->CustomerCode = "K-LFMCD2"; 
    $obj->CreatedBy = "1208496."; 
    $obj->Remark = "re"; 
    $obj->Remark2 = "re"; 
    $obj->SOTerakhir = ""; 
    $obj->TglSoTerakhir = ""; 
    $arrTestData[] = $obj; 

    $obj = new stdClass(); 

    $obj->TransactionNo = "OPM-EC-K-LFMCD2-21.6"; 
    $obj->StokOpnameTransNo = "OPM-EC-K-LFMCD2-21"; 
    $obj->ItemCode = "BBG150500081"; 
    $obj->ItemName = "BIG BAG"; 
    $obj->OriginalPrice = "229900.00"; 
    $obj->Price = "229900.00"; 
    $obj->QtyBegining = "0"; 
    $obj->QtyIn = "0"; 
    $obj->QtySales = "0"; 
    $obj->QtyMutasi = "0"; 
    $obj->QtyStock = "0"; 
    $obj->QtyOpname = "1"; 
    $obj->QtyAdjust = "0"; 
    $obj->TotalAdjust = ".00"; 
    $obj->rak = "SS"; 
    $obj->line = "SS"; 
    $obj->TransDate = "2017-03-31 10:46:00.000"; 
    $obj->CustomerCode = "K-LFMCD2"; 
    $obj->CreatedBy = "1208496."; 
    $obj->Remark = "re"; 
    $obj->Remark2 = "re"; 
    $obj->SOTerakhir = ""; 
    $obj->TglSoTerakhir = ""; 
    $arrTestData[] = $obj; 

,創建另一個數組,其關鍵是itemcode或I可以通過itemcode

$newArr = array(); 
    foreach($arrTestData as $data){ 
     $newArr[$data->ItemCode][] = $data; 
    } 

現在,顯示說濾波數據組結果數據:

echo '<table border="2"> 
       <tr> 
        <td>item code</td> 
        <td>item name</td> 
        <td>QtyBegining</td> 
        <td>QtyIn</td> 
        <td>QtySales</td> 
        <td>QtyMutasi</td> 
        <td>QtyStock</td> 
        <td>QtyOpname</td> 
        <td>QtyAdjust</td> 
        <td>TotalAdjust</td> 
       </tr>'; //add others columns as required 
    foreach ($newArr as $key => $item){ 
     $QtyBegining = $QtyIn = $QtySales = $QtyMutasi = $QtyStock = $QtyOpname = $QtyAdjust = $TotalAdjust = 0; // to store sum of each field itemcode wise 
     for($i=0; $i<count($item); $i++){ 
      echo '<tr>' 
        . '<td>'.$item[$i]->ItemCode.'</td>' 
        . '<td>'.$item[$i]->ItemName.'</td>' 
        . '<td>'.$item[$i]->QtyBegining.'</td>' 
        . '<td>'.$item[$i]->QtyIn.'</td>' 
        . '<td>'.$item[$i]->QtySales.'</td>' 
        . '<td>'.$item[$i]->QtyMutasi.'</td>' 
        . '<td>'.$item[$i]->QtyStock.'</td>' 
        . '<td>'.$item[$i]->QtyOpname.'</td>' 
        . '<td>'.$item[$i]->QtyAdjust.'</td>' 
        . '<td>'.$item[$i]->TotalAdjust.'</td>' 
        . '</tr>'; 
      $QtyBegining += $item[$i]->QtyBegining; 
      $QtyIn += $item[$i]->QtyIn; 
      $QtySales += $item[$i]->QtySales; 
      $QtyMutasi += $item[$i]->QtyMutasi; 
      $QtyStock += $item[$i]->QtyStock; 
      $QtyOpname += $item[$i]->QtyOpname; 
      $QtyAdjust += $item[$i]->QtyAdjust; 
      $TotalAdjust += $item[$i]->TotalAdjust;   
     } // end for loop 
     //now display the sum of each field, note: add empty td as many required 
     echo '<tr>' 
      . '<td>&nbsp;</td>' 
        . '<td>&nbsp;</td>' 
        . '<td>'.$QtyBegining.'</td>' 
        . '<td>'.$QtyIn.'</td>' 
        . '<td>'.$QtySales.'</td>' 
        . '<td>'.$QtyMutasi.'</td>' 
        . '<td>'.$QtyStock.'</td>' 
        . '<td>'.$QtyOpname.'</td>' 
        . '<td>'.$QtyAdjust.'</td>' 
        . '<td>'.$TotalAdjust.'</td>' 
        . '</tr>'; 
    } //end foreach loop 
    echo '</table>'; 

希望這可以幫到你。

0

帶鍵和值的遞歸循環是將陣列打印到所需表格格式的最佳方式。