[英]PHP Array_Unique Problem
我不太了解PHP,所以请多多包涵。
我的客户有一个包含信息的数据库,其中一个字段为ff_date_time,格式为“ 2010年10月5日星期二14:43:10”。 这里有很多条目,我需要显示仅包含条目的日期的列表:即,
$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日星期一”)。
任何线索这是怎么回事?
array_unique保留键,因此您得到的数组具有元素[0],[4]和[6]。
我建议使用
foreach ($dates as $date) {
echo('<a href="#">'.$date.'</a><br />');
}
如何消除症状,而不是解决症状。
将GROUP BY ff_date_time
添加到查询的末尾,或将DISTINCT()
环绕在ff_date_time中。 然后,您只会在sql结果中获得唯一的日期。
编辑:好的,假设ff_date_time实际上是一个datetime字段,那么为了忽略一天中的时间,请使GROUP BY DATE(ff_date_time)
仅使用日期部分,而不使用时间部分。 如果它不是日期时间字段,而只是一个字符串,则必须执行子字符串函数或使用其他人的答案。
使用array_unique之后, var_dump($dates)
的输出是什么?
尝试使用foreach而不是for循环:
foreach($dates as $date) {
echo('<a href="#">'.$date.'</a><br />');
}
我宁愿推荐您另一种方法。 使用内置的datetime函数。
$all_dates = array();
foreach($datetimes as $date) {
$all_dates[] = date('D M j Y', strtotime($date));
}
$unique = array_unique($all_dates);
将唯一数组分配给另一个数组变量。 并使用foreach
。
$newarr = array();
$newarr = array_unique($dates);
foreach ($newarr as $date) {
echo('<a href="#">'.$date.'</a><br />' . "\n");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.