Php 自动递增函数不接受0作为起始编号

Php 自动递增函数不接受0作为起始编号,php,while-loop,Php,While Loop,我创建了一个小函数来帮助我构建一个数组(我使用它来填充select2元素)。它工作得很好,但它不接受0作为起始数字 虽然这不是很关键,但我真的想知道为什么会发生这种情况,以及如何解决它 以下是函数: function create_numstring_array($startNum, $endNum, $jumps, $sideString = NULL) { if($startNum && $endNum) { $data = array();

我创建了一个小函数来帮助我构建一个数组(我使用它来填充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 />";
因为
$counter=0
但是我如何克服这个问题呢?

因为
(bool)0==False
。因此,您的代码失败,因为您正在测试$startNum,并且它被视为布尔值false

将其更改为更合理的值,例如:
if(is_int($startNum)
或类似的函数(
is_numeric
可能是候选函数)

,因为
(bool)0==False
。因此,您的代码失败,因为您正在测试$startNum,并且它被视为布尔False

将其更改为更合理的值,例如:
if(is int($startNum).
或类似的函数(
is numeric
可以是候选函数)

函数创建字符串数组($startNum,$endNum,$jumps,$sideString=NULL){
#检查有效输入
#(可以是浮点或整数,因此“结束”始终大于“开始”)
如果($startNum>$endNum | |!是数字($jumps)){
返回null;
}
#创建范围
$keys=范围($startNum、$endNum、$jumps);
#创建包含或不包含边字符串的值
$values=($sideString)
数组映射(函数($a)使用($sideString){return$a.'.'.$sideString;},$keys)
:$keys;
#返回新数组
返回数组_combine($keys,$value);
}
回显“代码:”。“
”; 打印(创建字符串数组(0,9,0.5,); 回显“”。“
”;
注释中解释了您的版本不工作的原因,因此这里是一个工作版本,用于检查有效的输入和有效的jumb。(适用于float和integer)。删除/跳过最后一个和第一个条目是不需要的。

函数create\u numstring\u array($startNum、$endNum、$jumps、$sideString=NULL){
#检查有效输入
#(可以是浮点或整数,因此“结束”始终大于“开始”)
如果($startNum>$endNum | |!是数字($jumps)){
返回null;
}
#创建范围
$keys=范围($startNum、$endNum、$jumps);
#创建包含或不包含边字符串的值
$values=($sideString)
数组映射(函数($a)使用($sideString){return$a.'.'.$sideString;},$keys)
:$keys;
#返回新数组
返回数组_combine($keys,$value);
}
回显“代码:”。“
”; 打印(创建字符串数组(0,9,0.5,); 回显“”。“
”;

注释中解释了您的版本不工作的原因,因此这里是一个工作版本,用于检查有效的输入和有效的jumb。(适用于float和integer)。删除/跳过最后一个和第一个条目是不需要的。

错误在while之前。错误:
if($startNum&$endNum)
,如果
$startNum=0
,则自(bool)0起测试失败表示为false。页面上第一个表中的最后一列应清楚说明其不起作用的原因。错误在while之前。错误:
如果($startNum&&$endNum)
,如果
$startNum=0
,则自(bool)起测试失败0表示错误。页面上第一个表格的最后一列应该清楚地说明它不起作用的原因。谢谢-is_int完成了该技巧;)-不知怎的,我在开始时想到了if条件-疯狂的我。再次感谢感谢你-is_int完成了该技巧;)-不知怎的,我在开始时想到了if条件-疯狂的我。再次感谢
while($endNum > $counter) {
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 />";