如何使用 PHP 中的特定条件从数组中删除一行
How to remove a row from an array using specific conditions in PHP
我有一个简单的数组,其中包含一些要在 html table 中显示的产品。
数组
Array
(
[0] => Array
(
[item] => Hp-Probook
[opening_qty] => 2
[sold] => 10
)
[1] => Array
(
[item] => Hp-5420s
[opening_qty] => 8
[sold] => 4
)
[2] => Array
(
[item] => Dell-Inspiron
[opening_qty] => 15
[sold] => 10
)
[3] => Array
(
[item] => MacBook-Air-Pro
[opening_qty] => 2
[sold] => 10
)
[4] => Array
(
[item] => MacBook-Pro
[opening_qty] => 2
[sold] => 1
)
)
这里我需要单独显示一些指定的产品,例如mac-在table中单独显示系列书
| name | qty | sold |
-----------------------------------
| Hp-Probook | 2 | 10 |
| Hp-5420s | 8 | 4 |
| Dell-Inspiron | 15 | 10 |
-----------------------------------
| Total | 25 | 24 |
-----------------------------------
|MacBook-Air-Pro | 5 | 5 |
| MacBook-Pro | 2 | 1 |
-----------------------------------
| total | 7 | 6 |
我尝试从第一个 foreach 中取消设置特定值,然后在总行生成下一个 foreach
<?php
$totalQty = 0;
$totalSold = 0;
foreach ($product as $key=>$value) {
if($value['item'] =='MacBook-Air-Pro'||$value['item'] =='MacBook-Pro') {
unset($product[$key]);
}
?>
<tr>
<td><?php echo $value['item'] ?></td>
<td><?php echo $value['opening_qty'] ?></td>
<td><?php echo $value['sold'] ?></td>
</tr>
<?php $totalQty += $value['opening_qty']; $totalSold += $value['sold'];?>
<?php } ?>
<tr>
<td>Total</td>
<td><?php echo $totalQty; ?></td>
<td><?php echo $totalSold; ?></td>
</tr>
这会像普通 foreach 一样显示所有产品,而 Unset 甚至不起作用,混淆了在下一个 foreach 中显示已删除(未设置)的行。
有没有其他方法可以做到这一点
谢谢,
unset
确实删除了该行。
问题是unset不会停止foreach循环的当前迭代,所以即使删除行,它也会输出产品线。
在您的情况下,您可以尝试将 unset($product[$key]);
替换为 continue;
例如
<?php
$totalQty = 0;
$totalSold = 0;
foreach ($product as $key=>$value) {
if($value['item'] =='MacBook-Air-Pro'||$value['item'] =='MacBook-Pro') {
continue;
}
?>
<tr>
<td><?php echo $value['item'] ?></td>
<td><?php echo $value['opening_qty'] ?></td>
<td><?php echo $value['sold'] ?></td>
</tr>
<?php $totalQty += $value['opening_qty']; $totalSold += $value['sold'];?>
<?php } ?>
<tr>
<td>Total</td>
<td><?php echo $totalQty; ?></td>
<td><?php echo $totalSold; ?></td>
</tr>
首先你需要continue
而不是unset()
(因为unset会删除值,而你实际上想要的是跳过满足条件的记录)。
2,您需要创建另一个数组并将 mac
值分配给该数组,然后执行相同的过程以显示它:
<?php
$totalQty = 0;
$totalSold = 0;
$macArray = [];
foreach ($product as $key=>$value) {
if($value['item'] =='MacBook-Air-Pro'||$value['item'] =='MacBook-Pro') {
$macArray[] = $value;
continue;
}
?>
<tr>
<td><?php echo $value['item'] ?></td>
<td><?php echo $value['opening_qty'] ?></td>
<td><?php echo $value['sold'] ?></td>
</tr>
<?php $totalQty += $value['opening_qty']; $totalSold += $value['sold'];?>
<?php } ?>
<tr>
<td>Total</td>
<td><?php echo $totalQty; ?></td>
<td><?php echo $totalSold; ?></td>
</tr>
<?php
$totalQty = 0;
$totalSold = 0;
foreach($macArray as $value){?>
<tr>
<td><?php echo $value['item'] ?></td>
<td><?php echo $value['opening_qty'] ?></td>
<td><?php echo $value['sold'] ?></td>
</tr>
<?php $totalQty += $value['opening_qty']; $totalSold += $value['sold'];?>
<?php } ?>
<tr>
<td>Total</td>
<td><?php echo $totalQty; ?></td>
<td><?php echo $totalSold; ?></td>
</tr>
我有一个简单的数组,其中包含一些要在 html table 中显示的产品。 数组
Array
(
[0] => Array
(
[item] => Hp-Probook
[opening_qty] => 2
[sold] => 10
)
[1] => Array
(
[item] => Hp-5420s
[opening_qty] => 8
[sold] => 4
)
[2] => Array
(
[item] => Dell-Inspiron
[opening_qty] => 15
[sold] => 10
)
[3] => Array
(
[item] => MacBook-Air-Pro
[opening_qty] => 2
[sold] => 10
)
[4] => Array
(
[item] => MacBook-Pro
[opening_qty] => 2
[sold] => 1
)
)
这里我需要单独显示一些指定的产品,例如mac-在table中单独显示系列书
| name | qty | sold |
-----------------------------------
| Hp-Probook | 2 | 10 |
| Hp-5420s | 8 | 4 |
| Dell-Inspiron | 15 | 10 |
-----------------------------------
| Total | 25 | 24 |
-----------------------------------
|MacBook-Air-Pro | 5 | 5 |
| MacBook-Pro | 2 | 1 |
-----------------------------------
| total | 7 | 6 |
我尝试从第一个 foreach 中取消设置特定值,然后在总行生成下一个 foreach
<?php
$totalQty = 0;
$totalSold = 0;
foreach ($product as $key=>$value) {
if($value['item'] =='MacBook-Air-Pro'||$value['item'] =='MacBook-Pro') {
unset($product[$key]);
}
?>
<tr>
<td><?php echo $value['item'] ?></td>
<td><?php echo $value['opening_qty'] ?></td>
<td><?php echo $value['sold'] ?></td>
</tr>
<?php $totalQty += $value['opening_qty']; $totalSold += $value['sold'];?>
<?php } ?>
<tr>
<td>Total</td>
<td><?php echo $totalQty; ?></td>
<td><?php echo $totalSold; ?></td>
</tr>
这会像普通 foreach 一样显示所有产品,而 Unset 甚至不起作用,混淆了在下一个 foreach 中显示已删除(未设置)的行。 有没有其他方法可以做到这一点 谢谢,
unset
确实删除了该行。
问题是unset不会停止foreach循环的当前迭代,所以即使删除行,它也会输出产品线。
在您的情况下,您可以尝试将 unset($product[$key]);
替换为 continue;
例如
<?php
$totalQty = 0;
$totalSold = 0;
foreach ($product as $key=>$value) {
if($value['item'] =='MacBook-Air-Pro'||$value['item'] =='MacBook-Pro') {
continue;
}
?>
<tr>
<td><?php echo $value['item'] ?></td>
<td><?php echo $value['opening_qty'] ?></td>
<td><?php echo $value['sold'] ?></td>
</tr>
<?php $totalQty += $value['opening_qty']; $totalSold += $value['sold'];?>
<?php } ?>
<tr>
<td>Total</td>
<td><?php echo $totalQty; ?></td>
<td><?php echo $totalSold; ?></td>
</tr>
首先你需要continue
而不是unset()
(因为unset会删除值,而你实际上想要的是跳过满足条件的记录)。
2,您需要创建另一个数组并将 mac
值分配给该数组,然后执行相同的过程以显示它:
<?php
$totalQty = 0;
$totalSold = 0;
$macArray = [];
foreach ($product as $key=>$value) {
if($value['item'] =='MacBook-Air-Pro'||$value['item'] =='MacBook-Pro') {
$macArray[] = $value;
continue;
}
?>
<tr>
<td><?php echo $value['item'] ?></td>
<td><?php echo $value['opening_qty'] ?></td>
<td><?php echo $value['sold'] ?></td>
</tr>
<?php $totalQty += $value['opening_qty']; $totalSold += $value['sold'];?>
<?php } ?>
<tr>
<td>Total</td>
<td><?php echo $totalQty; ?></td>
<td><?php echo $totalSold; ?></td>
</tr>
<?php
$totalQty = 0;
$totalSold = 0;
foreach($macArray as $value){?>
<tr>
<td><?php echo $value['item'] ?></td>
<td><?php echo $value['opening_qty'] ?></td>
<td><?php echo $value['sold'] ?></td>
</tr>
<?php $totalQty += $value['opening_qty']; $totalSold += $value['sold'];?>
<?php } ?>
<tr>
<td>Total</td>
<td><?php echo $totalQty; ?></td>
<td><?php echo $totalSold; ?></td>
</tr>