如何使用PHP基于键在表中垂直显示数组值?

时间:2015-11-19 06:43:04

标签: php mysql arrays html-table

我有一个表格,显示项目名称列表,类别,每个类别的项目数量以及所有项目的项目总数量。预期结果应如下所示:

Item Name | Item Class | Item Quantity | Total Quantity
          |      1     |       4       |
     A    |      2     |       5       |       11
          |      3     |       2       |
-------------------------------------------------------
          |      1     |       6       |
     B    |      2     |       3       |        10
          |      3     |       1       |        

但我得到的是这样的:

Item Name | Item Class | Item Quantity | Total Quantity
          |      1     |       4       |
     A    |      2     |       5       |
          |      3     |       2       |
----------------------------------------
          |      1     |       6       |
     B    |      2     |       3       |
          |      3     |       1       | 11 | 10

如何使用键(项目名称)和rowspan在同一行中垂直显示总数量。我使用数组来显示结果,因为有隐藏的计算。由于计算,我的代码有点复杂,但我们只是忽略计算部分,因为它工作正常。如果您需要了解我的计算,可以从我的个人资料中查看我之前的问题。我现在需要解决的是如何正确显示总数量。

这是我的代码:

<table>
  <tr> 
    <td>Item Name</td>
    <td>Item Class</td>
    <td>Item Quantity</td>
    <td>Total Quantity</td>
  </tr>

    <?php
    $result=mysql_query("SELECT * FROM tblitem");
    $classqty=array();

    while($row = mysql_fetch_array($result)){
        $item=$row['itemName'];
        $class=$row['itemClassName'];

        if(!isset($classqty[$item][$class]))
        {
        $classqty[$item][$class] = 0;
        }
        if(is_null($row['itemLocCheckOut'])){
            $classqty[$item][$class] += $row['itemQty'];
        }
        else{
            $classqty[$item][$class] -= $row['itemQty'];
        }
    }

    $sum=array();
        foreach($classqty as $k1=>$v1){
            foreach($v1 as $k2=>$v2){
                if(!isset($sum[$k1])){
                $sum[$k1] = $v2;
                }
                else
                {
                $sum[$k1] += $v2;
                }
    ?>

  <tr>
     <td><?php echo $k1;?></td>
     <td><?php echo $k2;?></td>
     <td><?php echo $v2;?></td>
   <?php
       } /*close second foreach*/
      } /*close first foreach*/

    foreach($sum as $name=>$total){
   ?>
    <td><?php echo $total;?></td>

    <?php
    } /*close foreach for $sum*/
    ?>
    </tr> 
    </table>

P / S:请不要建议我使用SELECT SUM,因为我的计算没有问题,我不能简单地使用SUM,因为我的代码涉及多个系列的计算,总数量是根据计算结果。我的问题只是如何在垂直位置正确显示总数量结果。

2 个答案:

答案 0 :(得分:0)

试试这个......

SELECT *,SUM(IF(item_name='a',itemQuantity,0)) AS itemQuantityA,SUM(IF(item_name='b',itemQuantity,0)) AS itemQuantityB FROM tblitem

使用此项,您将直接获得项目A和B的总和。

根据您的要求,您可以编辑或自定义此查询。 希望这会有所帮助。

答案 1 :(得分:0)

HTML需要更正。已经纠正了代码。试一试

<table>
  <tr> 
    <td>Item Name</td>
    <td>Item Class</td>
    <td>Item Quantity</td>
    <td>Total Quantity</td>
  </tr>

    <?php
    $result=mysql_query("SELECT * FROM tblitem");
    $classqty=array();

    while($row = mysql_fetch_array($result)){
    $item=$row['itemName'];
    $class=$row['itemClassName'];

    if(!isset($classqty[$item][$class]))
    {
        $classqty[$item][$class] = 0;
    }
    if(is_null($row['itemLocCheckOut'])){
        $classqty[$item][$class] += $row['itemQty'];
    }
    else{
        $classqty[$item][$class] -= $row['itemQty'];
    }
    }
?>
<tr>
<?php

    $sum=array();
    foreach($classqty as $k1=>$v1){
    ?>
        <td><?php echo $k1;?></td>
        <td>
        <table>
        <tr>
        <?php
        foreach($v1 as $k2=>$v2){
        if(!isset($sum[$k1])){
            $sum[$k1] = $v2;
        }
        else
        {
            $sum[$k1] += $v2;
        }
    ?>
    <td><?php echo $k2;?></td>
    <td><?php echo $v2;?></td>
  <?php
      } /*close second foreach*/
      ?>
      </tr>
      </table>
      </td>
      <td><?php echo $sum[$k1];?></td>
      } /*close first foreach*/
    ?>
    </tr> 
    </table>