如何防止 PHP 在条件语句中进行八进制数学运算? (为什么 08 === 0)

How to prevent PHP from doing octal math in conditionals? (why does 08 === 0)

我正在使用解析 crontab 的代码。

我发现它工作得很好,但是我发现如果我制作一个像

这样的 cron
0 * * * *

它会在第 0 分钟、第 8 分钟和第 9 分钟运行。我分解了每一行代码。

https://gist.github.com/goosehub/7deff7928be04ec99b4292be10b4b7b0

我发现如果当前分钟是 8,我得到的是 0 的条件。

08 === 0

我用 PHP

测试了这个
if (08 === 0) {
    echo 'marco';
}

运行之后,我在输出中看到 marco。看来 PHP 正在将 08 视为八进制。因为在八进制中 070100809 被评估为 00.

如何在此条件中强制进行小数比较?

来自 IntegerPHP 文档

http://php.net/manual/en/language.types.integer.php

To use octal notation, precede the number with a 0 (zero).

但是,不要只使用 ltrim($time[$k], '0'),因为这会将 0 变成 </code>。相反,请使用正则表达式。在这种情况下,<code>/^0+(?=\d)/.

在这种情况下,像这样将其应用于 $time[$k] 输入。

$time[$k] = preg_replace('/^0+(?=\d)/', '', $time[$k]);