2017-03-10 15 views
0

私は配列を構築するのに役立つ小さな関数を作成しました(select2要素を設定するために使用します)。それは素晴らしい動作しますが、開始番号として0を受け付けません。自動インクリメント機能は開始番号として0を受け付けません

本当に重要ではありませんが、なぜこれが起こり、どうやって解決するのかを本当に理解したいと思います。

function create_numstring_array($startNum, $endNum, $jumps, $sideString = NULL) { 
    if($startNum && $endNum) { 
     $data = array(); 
     $counter = intval($startNum); 
     while($endNum > $counter) { 
      $data["$counter"] = $counter.' '.$sideString; 
      $counter = $counter + $jumps; 
      // echo $counter."<br />"; 
     } 
     return $data; 
    } 
} 


/* DOESNT WORK 
echo '<pre>Code:'."<br />"; 
print_r(create_numstring_array(0, 9, 0.5, '')); 
echo '</pre>'."<br />"; 
*/ 



/* WORKS! */ 
echo '<pre>Code:'."<br />"; 
print_r(create_numstring_array(1, 9, 0.5, '')); 
echo '</pre>'."<br />"; 

私はそれが$counter = 0ので、この部分

while($endNum > $counter) { 

で立ち往生推測するが、私はこれをどのように克服することができます:ここでは

は、関数のですか?

+4

エラーはその前です。エラー: '($ startNum && $ endNum)'、 '$ startNum = 0'の場合、(bool)0はfalseを意味するのでテストは失敗します。 – kaldoran

+0

[PHP型比較表](http://php.net/manual/en/types.comparisons.php)ページの最初の表の最後の列は、なぜ機能しないのかを明確にする必要があります。 – axiac

答えて

3

(bool)0 == Falseです。 $ startNumをテストしていて、ブール値falseとして扱われるため、コードが失敗します。例えば、より合理的なものに

変更して、:if (is_int($startNum) ...またはそのような関数(is_numericが候補かもしれない)

+0

ありがとうございます - is_intはトリックでした;) - 何とか私はそれについて考えています。もう一度ありがとう –

2
function create_numstring_array($startNum, $endNum, $jumps, $sideString = NULL){ 
    #check for valid input 
    #(can be float or integer so lets end always greater than start) 
    if($startNum>$endNum || !is_numeric($jumps)) { 
      return null; 
    } 
    #create the range 
    $keys = range($startNum, $endNum, $jumps); 
    #create values with or without sideString 
    $values = ($sideString) 
      ? array_map(function($a) use ($sideString){ return $a.' '.$sideString;},$keys) 
      : $keys; 
    #return the new array 
    return array_combine($keys,$values); 
} 


echo '<pre>Code:'."<br />"; 
print_r(create_numstring_array(0, 9, 0.5, '')); 
echo '</pre>'."<br />"; 

バージョンが動作していないのはなぜが、作業バージョンはので、ここで、コメントで説明されています有効な入力と有効なジャンクをチェックします。 (浮動小数点と整数で動作します)。最後のエントリと最初のエントリを削除/スキップする必要はありません。

+0

あなたの助けに感謝します。 –

関連する問題