在 while 循环中插入两个带有 array_push() 的值时出现问题


Trouble inserting two values with array_push() in a while loop

我正在尝试使用 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

我已经玩了一段时间了,但我似乎找不到我的错误。有谁知道我做错了什么?

你还有什么

想对这些行做的吗?因为这对我来说似乎更容易:

 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将不得不再次运行......

同意 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 是一个关联数组,其中日期作为键,出现次数作为值。