php 5,for循环没有正确显示以0开头的数字系列[重复]
Posted
技术标签:
【中文标题】php 5,for循环没有正确显示以0开头的数字系列[重复]【英文标题】:php 5, for loop not displaying correctly series of numbers that starts with 0 [duplicate] 【发布时间】:2015-02-20 14:33:49 【问题描述】:我正在尝试获取 for 循环的结果,例如:00001, 00002, 00003,
等,但结果未显示 0
's: 而我得到:1, 2, 3,
等。
这是代码:
$min = 00001;
$max = 00005;
for ($x = $min; $x <= $max; $x++)
echo "$x ";
【问题讨论】:
你需要使用str_pad
不只是消除前导零;任何以零开头的整数都被解释为八进制数。这意味着 0010 不代表十进制数 10,而是十进制数 8!除非您使用八进制数,否则不要在 php 整数前面加上 0。
实际上我将使用更高的值,例如 $max = 0387648
“实际上我将使用更高的值,例如$max = 0387648
” - 为什么前导零?同样,正如 Erik 所述和 Rizier 在下面的回答;前导零被视为八进制。你试过里齐尔的答案吗? @narclax
你知道你可以在 mysql 中实现这一点,将前导零作为列的前导字符。有几种方法可以做到这一点,在 PHP 中也是如此。我以前见过;这有点复杂,但这可能是您需要做的。使用八进制可能不会产生预期的结果。你 100% 确定要使用八进制吗? @narclax
【参考方案1】:
只需将您的 echo 语句更改为:
echo sprintf('%05d', $x);
另外,我建议您将 $min
和 $max
变量更改为:
$min = 1;
$max = 5;
因为如果您有前导零,那么数字将被解释为octal
数字!所以00012
不会是12
而是10
。
【讨论】:
因为如果你有前导零,那么数字会被解释为八进制数 - 完全正确。【参考方案2】:<?php
$min = 00001;
$max = 00005;
for ($x = $min; $x <= $max; $x++)
printf("%5d",$x);
?>
这是新代码
<?php
$min = 00001;
$max = 00005;
for ($x = $min; $x <= $max; $x++)
printf("%05d",$x);
echo '<br>';
?>
【讨论】:
这不是 OP 想要的!正确阅读问题... 你正好有四个 0 因为如果你有前导零,那么数字会被解释为八进制。 @vikramsharma 这也是你的事情。【参考方案3】:非常感谢您的帮助。通过 MySQL 做的伎俩完成了一切。只需将值更改为十进制并使用相应的 zerofill 属性分配字段大小 (7)。
现在我可以插入不带零的for
循环的计数,但数据库会为我插入它们。谢谢
【讨论】:
啊,毕竟我的链接/建议确实有帮助,太棒了! - 另一个幸福的结局 ;-)以上是关于php 5,for循环没有正确显示以0开头的数字系列[重复]的主要内容,如果未能解决你的问题,请参考以下文章