2016-04-22 32 views
1

试图在将其添加到Production之前测试我的代码,但为什么foreach循环仅将3个值传递给$strokes而不是所有4 $_POST数组值。其中之一是0为什么通过foreach循环的值不是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) 
+0

尝试:if($ _POST [$ stroke]!== null) –

+0

为什么要将数组命名为$ _POST?为什么??? – khandelwaldeval

+0

@khandelwaldeval我只是复制客户端'POST'。 – Conor

回答

5

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

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

改为。

+0

谢谢,'isset'太不直观了。 – Conor

0

这是因为if ($_POST[$stroke])评估为false如果$ _ POST [ '中风']是零(或空字符串,nullfalse)。

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

也许你应该写你的条件:

if ($_POST[$stroke] > 0)