【问题标题】:PHP Integers with leading zeros带前导零的 PHP 整数
【发布时间】:2011-12-09 19:49:51
【问题描述】:

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

我用谷歌搜索了这个,找不到任何东西。

【问题讨论】:

  • 你能用intval()函数转换成整数吗?
  • @Teddy - 我想我试过了,但我不确定。考虑到 PHP 是松散类型的,我不会得到完全相同的结果吗?当我有机会时,我将不得不进行一些测试。

标签: php string integer


【解决方案1】:

引用它。 0123 不带引号在 PHP 中是八进制。 It's in the docs

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

所以你应该把你的代码改成

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

【讨论】:

    【解决方案2】:

    我已经有一段时间了,因为我不得不涉足这么多 PHP 的工作,大部分时间都是 Javascript 3 年。但是 08 和 09 是个问题让我想到:它们可能会被视为八进制(以 8 为底),而数字 8 和 9 在八进制中存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多