带有前导零的PHP整数

AVP*_*mer 1 php string integer

特别是08和09给我带来了一些重大麻烦.这是一个PHP错误吗?

说明:我在客户的几个站点上有一个日历'小部件',我们有一个HTML硬编码的日历(我知道PHP函数可以生成n个月,但老板的人说'不').

在每一天,有一个PHP函数来检查当天的事件,通过当月的当天如下:

<td valign="top">01<?php printShowLink(01, $events) ?></td>
Run Code Online (Sandbox Code Playgroud)

$ 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'];
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

在8日和9日,不会出现任何事件.传递一天中的字符串而不是零填充整数会导致同样的问题.

解决方案应该是首先应该是非填充整数.但是,我的问题是,你有没有看到08和/或09这种奇怪的行为?

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

Fra*_*mer 8

引用它. 0123没有引号是PHP中的八进制. 它在文档中

$ php -r 'echo 01234, "\n01234\n";'
668
01234
$
Run Code Online (Sandbox Code Playgroud)

所以你应该改变你的代码

<td valign="top">01<?php printShowLink('01', $events) ?></td>
Run Code Online (Sandbox Code Playgroud)