特别是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搜索了一下,找不到任何东西。
答案 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 不以八进制存在。