PHP Array_Unique问题

时间:2010-10-07 15:32:01

标签: php arrays

我不太了解PHP,所以请耐心等待。

我的客户端有一个包含信息的数据库,其中一个字段是ff_date_time,格式为“Tue Oct 5 14:43:10 2010”。这里有很多条目,我需要显示只有条目的日期列表:即,

  • 2010年10月5日星期二
  • 7月7日星期四,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日星期一“)。

有什么线索在这里出错?

5 个答案:

答案 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"); 
}