我试图用for loop
迭代到从0开始的8位数字。例如,第一个数字是:00000000
,我想显示接下来的5个数字。
到目前为止,我设法完成某事。那样:
<?php
$start = 00000000;
$number = 5;
for ($i = $start; $i < $start + $number; $i++) {
$url = sprintf("http://test.com/id/%08d", $i);
echo $url . "\r\n";
}
?>
结果:
http://test.com/id/00000000
http://test.com/id/00000001
http://test.com/id/00000002
http://test.com/id/00000003
http://test.com/id/00000004
这个例子的一切都很好,但问题始于这样一个例子:
<?php
$start = 00050200;
$number = 5;
for ($i = $start; $i < $start + $number; $i++) {
$url = sprintf("http://test.com/id/%08d", $i);
echo $url . "\r\n";
}
?>
for循环产生:
http://test.com/id/00020608
http://test.com/id/00020609
http://test.com/id/00020610
http://test.com/id/00020611
http://test.com/id/00020612
虽然我期待:
http://test.com/id/00050200
http://test.com/id/00050201
http://test.com/id/00050202
http://test.com/id/00050203
http://test.com/id/00050204
答案 0 :(得分:9)
它不起作用,因为以0开头的数字被解释为八进制数。来自Integers page of the PHP Documentation(强调我的):
整数可以用十进制(基数10),十六进制(基数16)指定, 八进制(基数8)或二进制(基数2)表示法,可选地以a开头 标志( - 或+)。
自PHP 5.4.0起可以使用二进制整数文字。
要使用八进制表示法,请在数字前面加上0(零)。使用 十六进制表示法在数字前面加上0x。要使用二进制 符号前面带有0b的数字。
只需使用:
$start = 50200;
在代码的开头,一切都应该正常。
答案 1 :(得分:2)
你获得其他数字的原因是前导零使你的数字成为八进制。因此,您首先设置$start = 00050200;
,这会使$start
八进制。
只需删除这些前导零,代码就可以了。