PHP целые числа с ведущими нулями - PullRequest
1 голос
/ 09 декабря 2011

В частности, 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?

Я прогуглил это и не смог ничего найти.

Ответы [ 2 ]

8 голосов
/ 09 декабря 2011

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

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

Таким образом, вы должны изменить свой код на

<td valign="top">01<?php printShowLink('01', $events) ?></td>
3 голосов
/ 09 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...