我不太了解PHP,所以请耐心等待。
我的客户端有一个包含信息的数据库,其中一个字段是ff_date_time,格式为“Tue Oct 5 14:43:10 2010”。这里有很多条目,我需要显示只有条目的日期列表:即,
$query = "SELECT ff_date_time FROM booth_submit";
$query_result = mysql_query($query);
$datetimes = array();
$dates = array();
while ($row = mysql_fetch_array($query_result)) {
$datetimes[] = $row['ff_date_time'];
}
for ($i = 0; $i < sizeOf($datetimes); $i++) {
$temp = explode(" ", $datetimes[$i]);
$dates[] = ($temp[0]." ".$temp[1]." ".$temp[2]." ".$temp[4]); # Breaks date_time into 'Mon Oct 5 2010' format
}
$dates = array_unique($dates);
for ($i = 0; $i < sizeOf($dates); $i++) {
echo('<a href="#">'.$dates[$i].'</a><br />');
}
我正在为另外两个工作正常的字段做类似的事情,但由于某种原因,这总是产生一个$ dates数组,它是正确的长度(即:4个唯一日期,数组大小为4),但仅限于第一个$ dates元素有任何信息。输出如下:
<a href="#">Mon Oct 3 2010</a><br />
<a href="#"></a><br />
<a href="#"></a><br />
<a href="#"></a><br />
当我不使用array_unique并且仅测试值来检查是否所有内容都被正确加载和解析时,阵列就应该是正确的(“2010年10月3日星期一”,“2010年10月3日星期一”,“星期一” 2010年10月3日“,”2010年10月4日星期一“,”2010年10月5日星期一“,”2010年10月5日星期一“,”2010年10月6日星期一“)。
有什么线索在这里出错?
答案 0 :(得分:2)
array_unique保留了键,因此生成的数组包含元素[0],[4]和[6]。
我建议使用
foreach ($dates as $date) {
echo('<a href="#">'.$date.'</a><br />');
}
答案 1 :(得分:1)
如何处理症状,而不是处理症状。
将GROUP BY ff_date_time
添加到查询的末尾,或在select中围绕ff_date_time包裹DISTINCT()
。然后你只会在你的sql结果中得到唯一的日期。
编辑:好的,假设ff_date_time实际上是一个日期时间字段,那么为了忽略一天中的时间,使GROUP BY DATE(ff_date_time)
只使用日期部分而不是时间部分。如果它不是日期时间字段,而只是一个字符串,则必须执行子字符串函数,或使用其他人的答案。
答案 2 :(得分:1)
使用array_unique后,var_dump($dates)
的输出是什么?
尝试使用foreach而不是for循环:
foreach($dates as $date) {
echo('<a href="#">'.$date.'</a><br />');
}
答案 3 :(得分:1)
我宁愿向您推荐另一种方法。使用内置的日期时间函数。
$all_dates = array();
foreach($datetimes as $date) {
$all_dates[] = date('D M j Y', strtotime($date));
}
$unique = array_unique($all_dates);
答案 4 :(得分:1)
将唯一数组分配给另一个数组变量。并使用foreach
。
$newarr = array();
$newarr = array_unique($dates);
foreach ($newarr as $date) {
echo('<a href="#">'.$date.'</a><br />' . "\n");
}