В частности, 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 не существуют в восьмеричном.