2016-04-22 61 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)