【问题标题】:Condition check inside foreach loopforeach 循环内的条件检查
【发布时间】:2021-08-09 21:09:41
【问题描述】:

我想从 json 数组中过滤 $data['stock'] != 0 的数据。我可以将条件检查放在 foreach 循环中吗?或者,有没有更好的方法来执行相同的操作?

foreach($json['items'] as $data)
{
  if(!$data['stock'] == 0) {
    echo 'Success';
  }
} 

【问题讨论】:

  • 提供的代码有问题吗?
  • “我可以将条件检查放在 foreach 循环中吗?” - 您是否尝试过这样做并看看会发生什么?你没有理由不能这样做。虽然您可能会查看array_filter

标签: php arrays if-statement foreach conditional-statements


【解决方案1】:

有很多方法可以实现您想要实现的目标。你的代码没有错。你也可以试试array_filter()

$json = [
    "items" => [[
        "name" => "Widget",
        "stock" => 3
    ],[
        "name" => "Foo",
        "stock" => 0
    ],[
        "name" => "Bar",
        "stock" => 2
    ]]
];

$filtered_array = array_filter($json['items'], function($data){
 return $data['stock'];
 //Will get rid fo the Foo item because its stock is 0
});

var_dump($filtered_array);
// Will NOT contain the Foo item

预期输出:

array(2) {
  [0]=>
  array(2) {
    ["name"]=>
    string(6) "Widget"
    ["stock"]=>
    int(3)
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(3) "Bar"
    ["stock"]=>
    int(2)
  }
}

这将过滤您的数组以仅包含具有$data['stock'] 值的那些项目。你不需要写!= 0,因为在 PHP 中,在这个特定的比较上下文中,0 被翻译为布尔值 false。

Quick demo

【讨论】:

  • 我是否也需要使用 foreach 循环?
  • 我添加了一个演示,以便更清楚地了解array_filter() 的作用。我记得一开始我觉得这个方法看起来很复杂,因为你有一个嵌入式函数,但它实际上非常简单。并不总是比使用 foreach() 循环更干净,但它是一个很好的放在你的后兜里。
  • 或者,使用现代 PHP:array_filter($json["items"], fn ($item) => $item["stock"] > 0);
猜你喜欢
  • 2019-09-04
  • 2010-12-16
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2010-11-16
  • 1970-01-01
相关资源
最近更新 更多