我正在尝试使用PHP while
循环计算MySQL表中某些日期的出现次数,并将重复日期和次数放在array
中。我能够正确地将日期添加到数组中,但我似乎无法添加重复次数。
示例:
function counter() {
//The 'timestamp' column uses the MySQL timestamp type
$query = mysql_query("SELECT timestamp FROM table1 ORDER BY timestamp DESC");
$date_c;
$counter = 0;
$date_array();
while($row = mysql_fetch_array($query)) {
//gets the year, month, and day from the timestamp
$year = substr($row['timestamp'], 0, 4);
$month = substr($row['timestamp'], 5, 2);
$day = substr($row['timestamp'], 8, 2);
$date = $month.'/'.$day.'/'.$year;
if($date == $date_c) {
$counter += 1;
} else {
array_push($date_array, $date, $counter);
$counter = 0;
}
$date_c = $date;
但是,当我echo
数组的一部分时,计数器不会更新。以下是使用table1
中第一个重复日期的示例:
>>> echo $date;
06/15/2012
>>> echo $counter;
25
>>> echo $date_array[0];
06/15/2012
>>> echo $date_array[1];
0
我已经玩了一段时间,但我似乎无法找到我的错误。有谁知道我做错了什么?
答案 0 :(得分:2)
你还想对这些行做些什么吗?因为这对我来说似乎更容易:
SELECT DATE_FORMAT(timestamp,'%m/%d/%Y') as 'date', COUNT(*) as 'count'
FROM table1
GROUP BY DATE_FORMAT(timestamp,'%m/%d/%Y')
ORDER BY timestamp DESC
...并且php代码中的问题可能是最后一个日期/计数未被推送到$date_array
(在 while循环之后,array_push必须再次运行完成后,如果最后一次迭代没有在数组上推一个计数器.....)
答案 1 :(得分:1)
同意Wrikken,您可以在SQL中获取唯一日期的计数,而不是需要在PHP中进行。
但是,如果你想计算每个日期的实例,我会在PHP中使用数组的关联数组功能。如下所示:
$query = mysql_query("SELECT timestamp FROM table1");
$date_array = array();
while($row = mysql_fetch_array($query)) {
$year = substr($row['timestamp'], 0, 4);
$month = substr($row['timestamp'], 5, 2);
$day = substr($row['timestamp'], 8, 2);
$date = $month.'/'.$day.'/'.$year;
// Using the @ symbol to suppress warnings for missing index
@ $date_array[$date]++;
}
print_r($date_array);
在该循环结束时,$ date_array是一个关联数组,以日期为键,出现次数为值。