foreach循环中的Array_slice没有切片,但我可以推?

时间:2018-04-23 17:07:45

标签: php arrays slice

我有一个数组,如果它们匹配条件语句,我想切片记录;我想保留原始索引值,这就是为什么我要尝试切片而不是推送索引值从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[]],我非常需要它们保持原始状态。

非常感谢指导!

1 个答案:

答案 0 :(得分:2)

除非您需要存储要移除的内容,否则您需要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()