分析错误:无效的数字文本

2022-08-30 18:27:45

运行下面的代码时,我遇到以下错误:

法典:

<?php
    $a = array(00001, 00008, 00009, 00012);
    print_r($a);
?>

错误:

分析错误:无效的数字文本。

为什么会出现此问题,我该如何解决这个问题?


答案 1

这来自对 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

答案 2

这是因为所有以 0 开头的数字都被视为八进制值,其上限为每个位置 8 位 (0-7)。如PHP手册中所述,它们现在(7.x)不会默默地删除无效数字,而是产生上述警告。

你为什么要这样写你的数字呢?如果前导零是显著的,那么它就不是你拥有的数字,而是一个字符串。如果需要像对数字一样对这些值进行计算,则需要在将值输出到客户端时添加前导零。
这可以通过以下方式完成或如下所示:printf()sprintf()

$number = 5;
printf ("%05$1d", $number);

有关更多示例,请参阅手册