我正在构建一个日历,在数组方面我真的很蠢。 首先,我需要查询我的数据库,所以:
$events = mysql_query ("SELECT id,title,date WHERE date BETWEEN 2009-01-01 AND 2009-01-31")
or die(mysql_error());
所以,现在我需要订购这些事件,所以当我回复我的日历表时,我可以检查这个数组的事件。 在这个伟大的Calendar written by David Walsh中,他每天都会查询,但我认为这将是一场表演噩梦。 那么......任何想法我该怎么做?
答案 0 :(得分:3)
首先,确保您将日期与日期进行比较。我认为您的代码应该是(即date
周围的单引号):
$events = mysql_query ("SELECT id,title,date WHERE date
BETWEEN '2009-01-01' AND '2009-01-31' order by date asc")or die(mysql_error());
假设date
是日期列。
答案 1 :(得分:2)
我会在优雅的for循环中做到这一点
for($i=0;$i<30;$i++)
{
$events[] = mysql_fetch_array(mysql_query ("SELECT id,title,date WHERE date BETWEEN 2009-01-01 AND 2009-01-{$i}"));
}
现在你有一个数组就像这样做
for($i=0;$i<count($events);$i++)
{
echo $events["id"];
}
将返回该数组中事件的每个ID
答案 2 :(得分:1)
关于您的评论,您可以这样做:获取像Davek建议的事件(请注意ORDER BY
!)
$events = mysql_fetch_assoc(mysql_query ("SELECT id,title,date WHERE date BETWEEN '2009-01-01' AND '2009-01-31' ORDER BY date asc"));
然后你得到了按日期排序的事件。要输出它,您可以这样做:
$last_date = null;
foreach($event in $events) {
if($last_date !== $event['date']) {
echo 'Events for day ' . $event['date'] . ": \n";
$last_date = $event['date'];
}
echo $event['title'] . "\n"
}
注意:这只是一个粗略的草图,你必须调整输出当然,但它应该给你正确的想法。
输出看起来像这样(在我的例子中):
Events for 2009-01-01:
Event 1
Event 2
Events for 2009-01-02:
Event 1
.
.
.
评论后编辑:
您可以编写自己的功能:
function get_events($date, $events) {
$result = array();
foreach($event in $events) {
if($event['date'] == $date) {
$result[] = $event;
}
}
return $result;
}
但是这样你每天都会一遍又一遍地搜索整个数组。如果从$events
数组中删除已搜索的事件,则可以对其进行改进。所以每次你搜索一个较小的数组。但是,如果存在性能问题,我只会这样做。