分析错误:无效的数字文本
运行下面的代码时,我遇到以下错误:
法典:
<?php
$a = array(00001, 00008, 00009, 00012);
print_r($a);
?>
错误:
分析错误:无效的数字文本。
为什么会出现此问题,我该如何解决这个问题?
运行下面的代码时,我遇到以下错误:
法典:
<?php
$a = array(00001, 00008, 00009, 00012);
print_r($a);
?>
错误:
分析错误:无效的数字文本。
为什么会出现此问题,我该如何解决这个问题?
这来自对 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
这是因为所有以 0 开头的数字都被视为八进制值,其上限为每个位置 8 位 (0-7)。如PHP手册中所述,它们现在(7.x)不会默默地删除无效数字,而是产生上述警告。
你为什么要这样写你的数字呢?如果前导零是显著的,那么它就不是你拥有的数字,而是一个字符串。如果需要像对数字一样对这些值进行计算,则需要在将值输出到客户端时添加前导零。
这可以通过以下方式完成或如下所示:printf()
sprintf()
$number = 5;
printf ("%05$1d", $number);