【问题标题】:php 5, for loop not displaying correctly series of numbers that starts with 0 [duplicate]php 5,for循环没有正确显示以0开头的数字系列[重复]
【发布时间】: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

标签: php for-loop


【解决方案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 循环的计数,但数据库会为我插入它们。谢谢

【讨论】:

  • 啊,毕竟我的链接/建议确实有帮助,太棒了! - 另一个幸福的结局 ;-)
猜你喜欢
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2018-03-25
相关资源
最近更新 更多