为什么没有0的值在foreach循环中传递?

时间:2016-04-22 16:28:57

标签: php arrays foreach

尝试在将代码添加到Production之前测试我的代码,但为什么foreach循环只将3个值传递给$strokes而不是所有4个$_POST数组值。其中一个是0

代码: https://ideone.com/qBO4rx

$_POST = array("h1" => 1, "h2" => 2, "h3" => 3, "h4" => 0);
$strokes = array();

$strokes_keys = array('h1', 'h2', 'h3', 'h4');

    foreach ($strokes_keys as $stroke) {
      if ($_POST[$stroke]) {
          array_push($strokes, $_POST[$stroke]);
        }
    }

    $counts = count($strokes);

    var_dump($strokes);
    var_dump($counts);

结果:

Success time: 0.04 memory: 52480 signal:0
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
int(3)

2 个答案:

答案 0 :(得分:5)

array_push($strokes, $_POST[$stroke]);未针对最后一项执行,因为零等于false。也许你应该尝试:

if (isset($_POST[$stroke])) {
     array_push($strokes, $_POST[$stroke]);
}

代替。

答案 1 :(得分:0)

这是因为if ($_POST[$stroke])评估为false如果$ _POST [' stroke']为零(或空字符串,null,{{ 1}})。

在这里,您可以找到有关各种类型的比较的更多信息: http://php.net/manual/en/types.comparisons.php

也许你应该写下你的条件:

false