2016-12-29 1 views
1

Я работал с кодом, который анализирует crontab.Как предотвратить PHP от выполнения восьмеричной математики в условных выражениях? (почему 08 === 0)

https://stackoverflow.com/a/5727346/3774582

Я нашел, что это прекрасно работает, но я обнаружил, что если я сделал хрон как

0 * * * * 

Она будет работать на 0 минут, на 8-й минуте, и 9-й минуте. Я сломал каждую строку кода.

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

я обнаружил, что я получал это условие для величины 0, если текущая минута была 8.

08 === 0 

Я проверил это с PHP

if (08 === 0) { 
    echo 'marco'; 
} 

После запуска что, я увидел marco на выходе. Похоже, PHP обрабатывает 08 как восьмеричную. Потому что в восьмеричном после 07010, 08 и 09 оценивается как 00.

Как я могу заставить десятичное сравнение в этом условном?

+0

Где находится '08'? – Barmar

+0

Вместо того, чтобы использовать 'date()' для получения полей текущего времени, используйте 'getdate()'. Это возвращает ассоциативный массив с компонентами времени в виде чисел, вам не нужно разбирать строку. – Barmar

ответ

1

Из PHP документации в Integer

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

Чтобы использовать восьмеричное обозначения, перед номером с 0 (ноль).

Однако, не просто использовать ltrim($time[$k], '0') потому, что это превратится в 0. Вместо этого используйте регулярное выражение. В этом случае /^0+(?=\d)/.

В этом случае примените его к входу $time[$k], как это делается.

$time[$k] = preg_replace('/^0+(?=\d)/', '', $time[$k]); 
Смежные вопросы