带有前导零的PHP整数

时间:2011-12-09 19:49:52

标签: php string integer

特别是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这种奇怪的行为?

我用Google搜索了一下,找不到任何东西。

2 个答案:

答案 0 :(得分:8)

引用它。没有引号的0123是PHP中的八进制。 It's in the docs

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

因此,您应该将代码更改为

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

答案 1 :(得分:3)

已经有一段时间了,因为我不得不跋涉这么多PHP已经做了大部分Javascript 3年。但08和09是一个问题让我想到:他们可能被视为八进制(基数为8),数字8和9 以八进制存在。