【问题标题】:PHP Why is this simple array showing incorrect value [duplicate]PHP为什么这个简单的数组显示不正确的值[重复]
【发布时间】:2021-05-15 05:14:33
【问题描述】:

这很简单,但是当我从这个 PHP 数组中echo $num[3] 时,我不明白为什么我得到 0。

$num=[00000004,00000002,00000005,00000009]; echo $num[3];

【问题讨论】:

  • 在数字前加 0(零)表示八进制表示法..
  • 如果您使用 PHP 7 或更高版本,这将引发致命错误。
  • 谢谢。我尝试了其他数字,我看到的是八进制结果。我从来不知道那件事。如果我想要其中的前导零,我需要将它们设为字符串。

标签: php arrays echo


【解决方案1】:

基于Integers手册

要使用八进制表示法,请在数字前加上 0(零)。使用 十六进制表示法在数字前加 0x。使用二进制 数字前加 0b 的符号。

您的值实际上代表八进制符号,这就是您导致问题的原因。

将它们转换为字符串:

$num=[
    '00000004',
    '00000002',
    '00000005',
    '00000009'
  ]; 
echo $num[3];

输出:https://3v4l.org/ktsJY

注意:- 从 Php7 开始,它会给你Parse error: Invalid numeric literal

https://3v4l.org/W3aD0

【讨论】:

  • @GertB AlivetoDie 的回答提到“八进制”是真正的问题。所以这是最好的答案。在 php5 中不使用引号是可以接受的,但结果显示的是八进制数。
  • 没错,这是最完整的答案。顺便说一句,添加 php7 注释是一个非常好的主意。我只是认为这是一个简单错误的大量信息。
【解决方案2】:

由于前导零,它需要是一个字符串,而不是一个数字:

$num=['00000004','00000002','00000005','00000009']; echo $num[3];

【讨论】:

    【解决方案3】:

    数据存储不正确,它们以数字形式存储,但它们是字符串,因此需要以字符串形式存储。当我运行你的代码时,它会抛出一个错误

    Parse error:  Invalid numeric literal in [...][...] on line 2
    

    下面的代码将返回 00000009

    $num=['00000004','00000002','00000005','00000009']; echo $num[3];
    

    【讨论】:

    • hmmz,看起来像我的答案...只有 php 7+ 会抛出错误顺便说一句
    【解决方案4】:

    你的语法不正确,试试这个

    $num = array("00000004","00000002","00000005","00000009");
    echo $num['3'];
    

    【讨论】:

    • 语法有什么问题???你的回答和我的回答一模一样。
    • 感谢您的解释,值存储为字符串,因此您必须用引号引起来。
    • 那你为什么要把 [...] 改成 array(...),那是不需要的。
    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 2013-07-07
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多