Intereting Posts
Как заменить все пробелы внутри элементов HTML на & nbsp; используя preg_replace? jQuery JSON отключается, не заселяя как использовать метод get в сеансе? Что вызывает «Невозможно выделить память для пула» в PHP? Symfony2 добирается до параметров access_control, расположенных в security.yml Создание пользовательской панели выполнения загрузки Может ли PHP «писать» или «копировать» на удаленном удаленном ресурсе, но не «отключать» или «переименовывать» («Доступ запрещен») Преобразование непрозрачных пикселей в черный PHP – печать всех операторов, выполняемых в скрипте командной строки PHP? Не удалось создать почтовую функцию. Почему эта ошибка возникает Проблема с разбиением на страницы в пользовательском шаблоне WordPress PHP cookie имеет одну задержку обновления Почему завершение кода Eclipse не работает над некоторыми проектами? Получение списка файлов по FTP Функция сортировки массива в PHP

PHP Целые числа с ведущими нулями

В частности, 08 и 09 вызвали у меня серьезные проблемы. Это ошибка PHP?

Объяснение: У меня есть «виджет» календаря на нескольких сайтах нашего клиента, где у нас есть HTML-код с жестким кодированием (я знаю, что функция PHP может генерировать n месяцев, но босс сказал «нет»).

В течение каждого дня есть функция PHP, которая проверяет события в этот день, пропуская текущий день месяца следующим образом:

<td valign="top">01<?php printShowLink(01, $events) ?></td> 

$ events – это массив всех событий в этом месяце, и функция проверяет, включено ли событие в этот день:

 function printShowLink($dayOfMonth, $eventsArray) { $show = array(); $printedEvent = array(); $daysWithEvents = array(); foreach($eventsArray as $event) { if($dayOfMonth == $event['day'] && !in_array($event['id'], $printedEvent)){ if(in_array($event['day'], $daysWithEvents)) { echo '<hr class="calendarLine" />'; } else { echo '<br />'; } $daysWithEvents[] = $event['day']; // string parsed from timestamp if($event['linked'] != 1) { echo '<div class="center cal_event '.$event['class'].'" id="center"><span title="'.$event['title'].'" style="color:#666666;">'.$event['shorttitle'].'</span></div>'; $printedEvent[] = $event['id']; } else { echo '<div class="center cal_event '.$event['class'].'" id="center"><a href="event.php?id='.$event['id'].'" title="'.$event['title'].'">'.$event['shorttitle'].'</a></div>'; $printedEvent[] = $event['id']; } } } } 

8-го и 9-го, никаких событий не появится. Передача строки дня вместо нулевого запаса вызывает ту же проблему.

Решение – это то, что должно было быть в первую очередь, не целое число. Однако, мой вопрос: видели ли вы это странное поведение с 08 и / или 09?

Я искал это и ничего не мог найти.

Ответить Цитировать 0123 без кавычек является восьмеричным в PHP. Это в документах

 $ php -r 'echo 01234, "\n01234\n";' 668 01234 $ 

Поэтому вы должны изменить свой код на

 <td valign="top">01<?php printShowLink('01', $events) ?></td> 

Прошло некоторое время с тех пор, как мне пришлось пробираться так много PHP, что в основном занимался Javascript в течение 3 лет. Но проблемы 08 и 09 заставляют меня думать: их можно рассматривать как восьмеричные (база 8), а цифры 8 и 9 не существуют в восьмеричном.