我创建了一个小函数来帮助我构建一个数组(我用它来填充select2元素)。它工作得很好,但它不接受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 />";
我想它会陷入这个部分
while($endNum > $counter) {
从$counter = 0
开始,但我怎么能克服这个?
答案 0 :(得分:3)
因为(bool)0 == False
。所以,你的代码失败了,因为你正在测试$ startNum,它被视为boolean false。
将其更改为更合理的内容,例如:if (is_int($startNum) ...
或类似的功能(is_numeric
可能是候选人)
答案 1 :(得分: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 />";
为什么你的版本不起作用,在评论中解释,所以这里是一个工作版本,检查有效输入和有效的jumbs。 (使用float和integer)。最后删除/ Skipp,第一次输入是不需要的。