使用PHP搜索MySQL数组中的日历日期?
我正在创建一个日历,而且在数组方面我真的很笨拙。所有的 首先,我需要查询我的数据库,所以:使用PHP搜索MySQL数组中的日历日期?
$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,他每天都会做一个查询,但我想这会是一场性能噩梦。 所以......任何想法我怎么能做到这一点?
好的,关于你的意见NTS你可以做这样的事情:得到的事件,如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
阵列中删除已经搜索到的事件,则可以对其进行改进。所以每次你搜索一个更小的阵列。但如果出现性能问题,我只会这样做。
首先,确保您将日期与日期进行比较。我觉得你的代码应该是(即周围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
是一个日期列。
我会做,在一个优雅的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}"));
}
现在你有一个数组做somethingg与它这样的
for($i=0;$i<count($events);$i++)
{
echo $events["id"];
}
将返回每个ID在事件该阵列
但在这种情况下'事件[0]'可以内容的阵列的一个元件(1天),'事件[1]'内容与两个元件(1天和第2天)等等...'$阵列事件[29]'内容整天。你应该将迭代器从1更改为至少 2009-12-14 21:49:22
不真的有含有一整天〜30的阵列,使得事件[0]是一个天一个很快 – streetparade 2009-12-14 22:22:24
和么,如果一个单一的一天有5个事件? – fedeisas 2009-12-14 23:06:15
@Felix:谢谢,你是在正确的轨道上。我想知道:是否有任何方法来构建函数,以便我可以调用get_events($ day,$ events),并搜索数组$ events并打印该特定$ day的事件?非常感谢。 – fedeisas 2009-12-15 17:22:29
@Felix:谢谢!真的感谢 – fedeisas 2009-12-15 17:36:34