PHP表单数字取余循环输出异常问题求助
PHP表单数字取余循环输出异常问题求助
嘿,我来帮你捋捋代码里的问题,难怪你会看到奇怪的结果,主要是这几个细节没处理对:
循环次数多了一次:你用了
$i <= strlen($num),但strlen($num)返回的是数字的位数(比如输入123的话,strlen是3),这样循环会从0跑到3,一共执行4次,比实际位数多了一次。应该改成$i < strlen($num)才对。没有更新原数字,导致每次取的都是最后一位:你每次只计算
$num%10,但从来没把$num的最后一位去掉,所以不管循环多少次,取余得到的都是同一个数字(比如123%10永远是3)。要拿到前一位的话,每次取余后得把$num除以10并取整,比如$num = (int)($num / 10)。变量类型的小细节:虽然表单里是
type="number",但PHP通过$_POST拿到的其实是字符串类型,虽然strlen和取余运算暂时能工作,但最好先转成整数,避免一些意外情况(比如用户输入了非数字的内容?不过input number会限制,但转类型更稳妥)。
给你两个修正后的方案,你可以选一个用:
方案一:用while循环(更适合数值操作)
这个方法不需要依赖字符串长度,直接循环到数字变成0为止,逻辑更清晰:
if(isset($_POST['number'])) { $num = (int)$_POST['number']; $sum = 0; $rem = 0; while($num > 0) { $rem = $num % 10; echo $rem . '<br>'; // 逐个输出每一位数字 $sum += $rem; $num = (int)($num / 10); // 去掉最后一位数字 } echo '<br>各位数字之和:' . $sum; }
方案二:用for循环结合字符串处理
如果你更习惯用for循环,可以把数字转成字符串,直接按索引取每一位:
if(isset($_POST['number'])) { $numStr = (string)$_POST['number']; $sum = 0; for($i=0; $i < strlen($numStr); $i++) { $rem = (int)$numStr[$i]; echo $rem . '<br>'; $sum += $rem; } echo '<br>各位数字之和:' . $sum; }
原来的代码之所以输出怪异,比如输入123的话会连续输出4个3,就是因为循环多了一次,而且每次都取同一个最后一位数字,现在改完之后就能正常输出每一位,也能算出正确的数字和啦。
备注:内容来源于stack exchange,提问作者cp2_101
相关产品推荐
相关产品推荐

