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->product_id]['price_per_pcs'] += $product->price_per_pcs;
行上的未定义偏移量。我试图解决但没有成功。
再次非常感谢您!没有要计算的内容时会发生错误。我刚刚添加了这个:foreach ($sale as $product) if ( ! isset($sum[$product->product_id])) $sum[$product->product_id]['price_per_pcs'] = $product->price_per_pcs; ... else $sum[$product->product_id]['price_per_pcs'] += $product->price_per_pcs ;...
由于不及时的回复,我再次道歉。我欠你一杯啤酒!
很高兴它为您解决了问题。感谢有关未定义偏移错误的反馈...我已更新答案以也使用ìsset()
以上是关于codeigniter foreach 具有相同 ID 的多个条目,对元素求和并显示为一个的主要内容,如果未能解决你的问题,请参考以下文章
如何从 CodeIgniter 中具有相同列名的表中输出数据?
如何在 Codeigniter 中组合具有相同页眉和页脚的视图页面?
使用 codeigniter 将具有相同输入名称的表单输入插入数据库行