Php 自动递增函数不接受0作为起始编号
我创建了一个小函数来帮助我构建一个数组(我使用它来填充select2元素)。它工作得很好,但它不接受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();
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 />";