如何使用 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>