Ran*_*osh 15 php arrays octal php-7
运行以下代码时出现以下错误:
码:
<?php
$a = array(00001, 00008, 00009, 00012);
print_r($a);
?>
Run Code Online (Sandbox Code Playgroud)
错误:
解析错误:无效的数字文字.
为什么会出现这个问题,我该如何解决?
Qir*_*rel 21
这来自对PHP7中处理整数(特别是八进制)的更改(与PHP5相比).
从文档(从PHP7迁移)
无效的八进制文字
以前,包含无效数字的八进制文字被静默截断(0128被视为012).现在,无效的八进制文字将导致解析错误.
从整数的文档
在PHP 7之前,如果在八进制整数(即8或9)中给出了无效数字,则忽略该数字的其余部分.从PHP 7开始,会发出解析错误.
将它们用作字符串或实际整数
$a = array(1, 8, 9, 12); // Integers
$a = array("00001", "00008", "00009", "00012"); // Strings
Run Code Online (Sandbox Code Playgroud)
这是因为所有以 0 开头的数字都被视为八进制值,每个位置 (0-7) 的上限为 8 位。正如PHP 手册中所述,现在(7.x)不会默默地删除无效数字,而是会产生上述警告。
你为什么要这样写你的数字?如果前导零很重要,那么它不是一个数字,而是一个字符串。如果您需要像数字一样对这些进行计算,那么您需要在将值输出到客户端时添加前导零。这可以通过以下方式
完成:printf()sprintf()
$number = 5;
printf ("%05$1d", $number);
Run Code Online (Sandbox Code Playgroud)