2009-09-16 44 views
0

我正在使用PHP脚本在网站上显示从MySQL数据库以某种方式格式化的信息。我希望数据库中的日期值(格式为YYYY-MM-DD)显示为月YYYY。我使用的显示个月的话也许,没有高效的,足以代码如下:如何使用PHP foreach循环显示某些值?

foreach($monthstart as $monthnext) 
    { 
    preg_match("/[[0-9][0-9]]*/", $monthnext, $startmonthfull); 
    } 
echo "<b>Duration: </b>"; 
foreach($startmonthfull as $which) 
{ 
    if($which == 01) 
{ 
echo "January "; 
} 
elseif($which == 02) 
{ 
echo "February "; 
} 
elseif($which == 03) 
{ 
echo "March "; 
} 
elseif($which == 04) 
{ 
echo "April "; 
} 
elseif($which == 05) 
{ 
    echo "May "; 
} 
elseif($which == 06) 
{ 
    echo "June "; 
} 
elseif($which == 07) 
{ 
    echo "July "; 
} 
elseif($which == 08) 
{ 
    echo "August "; 
} 
elseif($which == 09) 
{ 
    echo "September "; 
} 
elseif($which == 10) 
{ 
    echo "October "; 
} 
elseif($which == 11) 
{ 
    echo "November "; 
} 
elseif($which == 12) 
{ 
    echo "December "; 
} 
} 
foreach($year as $printyear) 
{ 
    echo $printyear; 
} 

这个代码显示年份和月份的第一部分。这个页面完美显示,除非该月份是八月或九月。如果这个月份是八月或九月,那么没有任何东西会打印出来,所以不是“2005年八月”),你会得到“2005”。

八月和九月elseif语句的格式(从我可以告诉)完全相同,因此我不知道为什么这些值不打印。如果我只是要求它打印$ which值,它会打印为08或09,并且这些值在数据库中看起来是正确的。我真的希望有一些简单的东西,我忽略了有人会很快指出,因为在这个问题上,我一直在撞墙。

(我不知道这有什么差别,但我正在使用的Joomla的JUMI插件,它允许用户在一个Joomla页面添加自定义代码来开发网站的这一部分。)

编辑:我刚刚从08和09删除0,现在他们都显示正常。所以我猜现在的问题是,为什么这样可以解决问题,当正在检查的变量值是08和09?

此外,抱歉在发布问题后不久就解决问题。

+2

请仔细阅读本:http://en.wikipedia.org/wiki/Loop-switch_sequence – Ikke 2009-09-16 13:36:17

回答

1

是你必须删除您的病情或PHP将它解释为八进制的0领先,你的代码更好的办法

foreach($monthstart as $monthnext){ 
    preg_match("/[[0-9][0-9]]*/", $monthnext, $startmonthfull); 
} 
echo "<b>Duration: </b>"; 
$monthArray = array(
1 => 'January', 
2 => 'February', 
3 => 'March', 
4 => 'April', 
5 => 'May', 
6 => 'June', 
7 => 'July', 
8 => 'August', 
9 => 'September', 
10 => 'October', 
11 => 'November', 
12 => 'December'); 

foreach($startmonthfull as $which){ 
echo($monthArray[$which] . " "); 
} 
foreach($year as $printyear) 
{ 
    echo $printyear; 
} 
1

php中以0开头的数字是体现八进制。这可能是原因。把“”放在他们周围。

但请阅读您的问题的评论中的链接。这被认为是反模式。

+0

感谢您的信息!它看起来像我的代码将最终大约五分之一。问题也在2分钟内回答! – 2009-09-16 13:45:10

3

你使用Joomla! 1.5,对吗?为什么不让Joomla!这样做的工作:

if (!defined('MY_DATE_FORMAT')) 
    define('MY_DATE_FORMAT', '%B %Y'); 
jimport('joomla.utilities.date'); 

$mysql_date = '2009-08-01'; 

$jdate = new JDate($mysql_date); 
echo $jdate->toFormat(JText::_(MY_DATE_FORMAT)); 

作为一个附带的好处,他甚至会在一个月转化为右/中使用的语言,如果你曾经选择翻译你的网站。

+0

正如我上面所说,谢谢你的信息,我一定会尝试一次,一切正常。我不知道我可以做那种整件东西。这似乎开放了很多可能 – 2009-09-17 19:01:41

2

让MySQL用date_format格式化日期,然后以您想要的方式将其返回给PHP。这样,您不需要使用PHP进行任何操作。

下面是一个例子查询您将使到MySQL:

select date_format(date_column, '%M %Y') as formatted_date from table; 

其中:

  • date_column是存储要格式化的日期与原始表列,
  • %M意味着你想要全名('一月','二月','三月'等)详细说明月份名称,并且意味着你想要4位数的年份。

在与“2009-09-17”值date_column字段将返回为“2009年9月”

例如,下面的输出显示与date_format()值沿原date_column值:

+-------------+----------------+ 
| date_column | formatted_date | 
+-------------+----------------+ 
| 2009-09-11 | September 2009 | 
| 2009-09-02 | September 2009 | 
| 2009-09-01 | September 2009 | 
| 2009-08-31 | August 2009 | 
| 2009-08-04 | August 2009 | 
| 2009-08-01 | August 2009 | 
| 2009-07-11 | July 2009  | 
| 2009-07-01 | July 2009  | 
| 2009-06-30 | June 2009  | 
| 2009-06-20 | June 2009  | 
| 2009-06-09 | June 2009  | 
| 2009-05-26 | May 2009  | 
| 2009-05-09 | May 2009  | 
| 2009-05-08 | May 2009  | 
| 2009-04-22 | April 2009  | 
| 2009-04-20 | April 2009  | 
| 2009-04-19 | April 2009  | 
| 2009-03-05 | March 2009  | 
| 2009-03-04 | March 2009  | 
| 2009-03-03 | March 2009  | 
+-------------+----------------+ 
+0

只注意到joomla标签,这个答案可能不合适。长颈鹿的答案可能更适合。 – shufler 2009-09-17 19:05:28

1

这种方式可以确保它适用于所有的语言环境,它使用很久以前为您写的东西。

的mysql:

select UNIX_TIMESTAMP(time) as unixtime from table; 

PHP:

$formatted_time = date('F Y', $row['unixtime']); 

它也可以让你重复使用$行[ 'unixtime']变量,因此您可以格式化不同的方式或重新使用它,而无需调用的MySQL再次在同一个脚本中。你甚至可以提供一个不同的字符串从常量或从一些用户可配置的选项到日期函数。

1

PHP有几个功能(以及PHP 5.3,DateTime类型)来处理时间和日期。

例如,在PHP 5.x的:

$mytime = strtotime($monthstart); 
// $output_date = date("F Y", $mytime); 
$output_date = strftime("%B %Y", $mytime); 

(包括strftime的,因为它通常可跨编程语言)

+0

自PHP 5.2以来,DateTime实际上已存在,但肯定足以在5.3中得到增强。 – giraff 2010-08-05 19:58:59

+0

@giraff:真的吗?嗯,我不知道。我认为我在DateTime的文档中看到它在5.3中是新的。 – Powerlord 2010-08-05 21:11:18