【问题标题】:How to remove a row from an array using specific conditions in PHP如何使用 PHP 中的特定条件从数组中删除一行
【发布时间】:2021-04-27 07:05:16
【问题描述】:

我有一个简单的数组,其中包含一些要在 html 表中显示的产品。 数组

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-book系列的Like


|      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 和总行之后取消设置特定值 make next 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 中显示已删除(未设置)的行。 有任何替代方法可以做到这一点 谢谢,

【问题讨论】:

    标签: php arrays yii2


    【解决方案1】:

    首先你需要continue而不是unset()(因为未设置删除值,而你实际上想要的是跳过满足条件的记录)。

    第二,您需要创建另一个数组并将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>
    

    【讨论】:

      【解决方案2】:

      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>
      

      【讨论】:

      • 好收获!我晚了 5 秒才赶上来
      猜你喜欢
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2023-03-17
      相关资源
      最近更新 更多