【问题标题】:Array_slice in foreach loop not slicing, but I can push?foreach 循环中的 Array_slice 不切片,但我可以推送?
【发布时间】:2025-12-28 16:45:11
【问题描述】:

我有一个数组,如果它们匹配条件语句,我想对记录进行切片;我想保留原始索引值,这就是为什么我尝试切片而不是推送索引值从 0 开始的新数组。

$array = Array(
  [item1] => Array 
    (
      [sale] => 29.92
      [onhand] => 0
      [date] => 2019-09-16
    )
  [item2] => Array 
    (
      [sale] => 0
      [onhand] => 0
      [date] => 2019-09-16
    )
  [item3] => Array 
    (
      [sale] => 0
      [onhand] => 230
      [date] => 2019-09-16
    )
)

我的条件:

  foreach($items as $item){
    if( $item['sale'] == 0 && $item['onhand'] == 0) {
      array_slice($array, $item);
    }
  }

期望的输出:

$array = Array(
      [item1] => Array 
        (
          [sale] => 29.92
          [onhand] => 0
          [date] => 2019-09-16
        )
      [item3] => Array 
        (
          [sale] => 0
          [onhand] => 230
          [date] => 2019-09-16
        )
    )

上面没有切片,我不确定切片是否适合这里的工具,或者我是否需要额外的映射?

我的另一个想法是将所需的项目推送到一个新数组,但这会将索引从[item1[], item2[], item3[]] 写入[0[], 1[], 2[]],我非常需要它们保持原始状态。

非常感谢您的指导!

【问题讨论】:

    标签: php arrays slice


    【解决方案1】:

    除非您需要存储要删除的内容,否则您需要unset()

    // Note the $key because we need to know which position we will conditionally unset
    foreach($items as $key=>$item){
        if( $item['sale'] == 0 && $item['onhand'] == 0) {
            unset($items[$key]);
        }
    }
    

    此外,如果您希望以某种方式“切片”它,那么您实际上需要array_splice()

    【讨论】:

    • === 不同