codeigniter foreach 具有相同 ID 的多个条目,对元素求和并显示为一个

Posted

技术标签:

【中文标题】codeigniter foreach 具有相同 ID 的多个条目,对元素求和并显示为一个【英文标题】:codeigniter foreach multiple entries with same ID, sum elements and displey as one 【发布时间】:2017-09-12 14:23:17 【问题描述】:

我使用 foreach 使用来自“销售”行 json_decode($row['sale']) 的数据制作表格,现在分别显示每个条目,我想要做的是将具有相同 ID [product_id] 的每个条目显示为一个并将 [num ], sum [product_pcs], sum [price_per_pcs] 所有具有相同id的条目并显示一行。

json_decode($row['sale']):

Array ( [0] => stdClass Object ( [stock_id] => 501 [product_id] => 7 [product_pcs] => 1120 [price_per_pcs] => 1.17 [num] => 1) [1] => stdClass Object ( [stock_id] => 500 [product_id] => 7 [product_pcs] => 1120 [price_per_pcs] => 1.17 [num] => 1 ) [2] => stdClass Object ( [stock_id] => 497 [product_id] => 3 [product_pcs] => 600 [price_per_pcs] => 1,1 [num] => 1 ) [3] => stdClass Object ( [stock_id] => 496 [product_id] => 3 [product_pcs] => 600 [price_per_pcs] => 1,1 [num] => 1 ) [4] => stdClass Object ( [stock_id] => 526 [product_id] => 25 [product_pcs] => 1120 [price_per_pcs] => 1.22 [num] => 1 ) [5] => stdClass Object ( [stock_id] => 525 [product_id] => 7 [product_pcs] => 1120 [price_per_pcs] => 1.17 [num] => 1 ) )

我这样显示接收到的数据:

<table>
<thead>
                        <tr>
                            <th>No</th>
                            <th>Product ID</th>
                            <th>Price Per Piece</th>
                            <th>Product pcs</th>
                            <th>Total products</th>
                    <?php 
                        $count      =   1;
                        $sale   = json_decode($row['sale']);
                        foreach ($sale as $product):
                    ?>
                        </tr>
 </thead>
  <tbody> 
   <tr>
                            <td><?php echo $count++;?>.</td>
                            <td><?php echo $product->product_id; ?></td>
                            <td><?php echo $product->price_per_pcs;?></td>
                            <td><?php echo $product->product_pcs; ?></td>
                            <td><?php echo $product->num; ?></td>
                        </tr>
                    <?php endforeach;?>
</tbody> 
</table>

通过以上内容,我得到了一个如下所示的表格: 我想看起来像这样:

我将不胜感激。

【问题讨论】:

最好的方法是更改​​ SQL 查询源...你能分享一下吗? 【参考方案1】:

最好的方法是更改​​原始 SQL 查询,但由于目前缺少该信息,您可以创建一个包含所需总和的新数组,例如:

<table>
<thead>
    <tr>
        <th>No</th>
        <th>Product ID</th>
        <th>Price Per Piece</th>
        <th>Product pcs</th>
        <th>Total products</th>
    </tr>
 </thead>
 <tbody>

    <?php 
    $sale = json_decode($row['sale']);

    $sum = array(); // INITIATE NEW ARRAY WITH SUMS

    //  SUM UP VALUES IN A NEW ARRAY...
    foreach ($sale as $product) 
        // CHECK IF ITEM IS SET TO PREVENT "Undefined offset" ERRORS... 
        if (!isset($sum[$product->product_id]))  
            // INITIATE ARRAYS.. THE PRODUCT ID IS USED AS ARRAY KEY 
            $sum[$product->product_id]['price_per_pcs'] = $product->price_per_pcs;
            $sum[$product->product_id]['product_pcs'] = $product->product_pcs;
            $sum[$product->product_id]['product_num'] = $product->num;       
         else  // ARRAYS ALREADY SET.. USE ASSIGNMENT OPERATORS TO SUM UP THE VALUES
            $sum[$product->product_id]['price_per_pcs'] += $product->price_per_pcs;
            $sum[$product->product_id]['product_pcs'] += $product->product_pcs;
            $sum[$product->product_id]['product_num'] += $product->num;
         
    

    // LOOP THROUGH SUMS ARRAY...   
    $count = 1;
    foreach ($sum as $key=>$val)
    ?>
   <tr>
        <td><?php echo $count++;?>.</td>
        <td><?php echo $key; ?></td>
        <td><?php echo $val['price_per_pcs'];?></td>
        <td><?php echo $val['product_pcs']; ?></td>
        <td><?php echo $val['product_num']; ?></td>
    </tr>
<?php  ;?>
</tbody> 
</table>

让我知道这是否适合您.. 或者我是否可以为您提供任何其他解决方案。

【讨论】:

抱歉等待。非常感谢您的回复。出现此代码消息:$sum[$product-&gt;product_id]['price_per_pcs'] += $product-&gt;price_per_pcs; 行上的未定义偏移量。我试图解决但没有成功。 再次非常感谢您!没有要计算的内容时会发生错误。我刚刚添加了这个:foreach ($sale as $product) if ( ! isset($sum[$product-&gt;product_id])) $sum[$product-&gt;product_id]['price_per_pcs'] = $product-&gt;price_per_pcs; ... else $sum[$product-&gt;product_id]['price_per_pcs'] += $product-&gt;price_per_pcs ;... 由于不及时的回复,我再次道歉。我欠你一杯啤酒! 很高兴它为您解决了问题。感谢有关未定义偏移错误的反馈...我已更新答案以也使用ìsset()

以上是关于codeigniter foreach 具有相同 ID 的多个条目,对元素求和并显示为一个的主要内容,如果未能解决你的问题,请参考以下文章

如何从 CodeIgniter 中具有相同列名的表中输出数据?

使用 codeigniter 在数据库中获取具有相同值的列

如何在 Codeigniter 中组合具有相同页眉和页脚的视图页面?

使用 codeigniter 将具有相同输入名称的表单输入插入数据库行

消息:未定义的索引:获取列名时(两个具有相同列的表)Codeigniter

Codeigniter:查看 foreach 调用控制器