【问题标题】:How to display array value vertically in table based on key using PHP?如何使用PHP根据键在表格中垂直显示数组值?
【发布时间】:2016-02-21 04:26:47
【问题描述】:

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

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

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

这是我的代码:

<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,因为我的代码涉及多个系列的计算,并且总量是基于结果的从计算。我的问题只是如何在垂直位置正确显示总量结果。

【问题讨论】:

  • 你的数量是根据商品名称来的吗?
  • @AjayMakwana 项目数量基于项目类别和项目名称。但是总数量是基于物品名称的,是指所有物品数量的总和,不考虑它们的类别。
  • &lt;tr&gt; 标签在 for 循环内打开,在 for 循环外关闭。您需要使 HTML 正确。

标签: php mysql arrays html-table


【解决方案1】:

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>

【讨论】:

  • 它有效,谢谢! :) 但您的代码需要稍作修改
  • 以及如何为总数量制作行跨度,以便总数量只显示一次,如上例所示。
  • 总数量不应该按照我在帖子中所做的修改重复。你能发布最新的输出结构吗?
  • 是的。我发布最新的输出结构作为答案。
  • 您是否修改了我发布的代码中的任何内容?因为我发布的结构应该可以正常工作。也不要将输出作为答案发布,而是编辑您的问题并将其发布在那里。
【解决方案2】:

试试这个...

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

使用这个你将直接得到项目A和B的总和。

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

【讨论】:

  • 谢谢你的想法,但是我的计算没有问题,我们不能直接从数据库中求和,因为我的代码涉及多个系列的计算,上表中的数据只是为了例子。我的系统将涉及大量数据。我的问题只是关于如何垂直显示总量并在同一行中显示正确的项目名称。谢谢你的帮助顺便说一句:)
  • 您是否尝试在完成第二个 foreach {} 后将 放入您的第一个 foreach。?
  • 是的,我试过了,但它会重复输出总量。我已经尝试了一切,但似乎没有任何效果:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多