<?php
function convertDates($timestamp) {
return date('Y-d-m', $timestamp);
}
$days = array(); //store all the times in this array
$occurences = array(); //count all the occurences for each day
$complete = array(); //fill in missing days in this array
$zero = array(); //missing days mean zero
$query = mysql_query("SELECT `login` FROM `statistics` ORDER BY `login` ASC");
while($rows = mysql_fetch_array($query)) {
$days[] = $rows['login'];
}
$days[] = time(); //append todays time in the array
for($i = 0; $i < count($days); $i++) {
$complete[] = convertDates($days[$i]);
$difference = isset($days[$i+1]) ? $days[$i+1] - $days[$i] : $days[$i] - $days[$i];
if($difference > 86400) {
$difference /= 86400;
$fill = $days[$i];
for($k = 0; $k < $difference; $k++) {
$fill += 86400;
$complete[] = convertDates($fill); //fill in missing days
$zero[] = convertDates($fill); //count this day as a zero
}
echo ceil($difference).' days missing between '.convertDates($days[$i+1]).' and '.convertDates($days[$i]).'<br/>';
}
//echo convertDates($days[$i]).'<br/>';
}
$occurences = array_count_values($complete); //count all duplicates of days, here will be the count of days
$complete = array_unique($complete); //remove duplicate days from array
sort($complete); //sort it again
//print_r($zero);
//print_r($occurences);
/*Here checking the logins for each day, including days that did not exist, but filled in as zero. Note calling them duplicates just means occurrences.*/
for($i=0; $i < count($occurences); $i++) {
if(in_array($complete[$i], $zero)) {
echo "$i [".$complete[$i]."] has 0 duplicates (". $occurences[$complete[$i]] .")<br/>";
} else {
echo "$i [".$complete[$i]."] has ".$occurences[$complete[$i]] . " duplicates<br/>";
}
}
echo "Days with empty days ".count($days)."<br/>";
echo "Days after being filled ".count($complete);
?>
私はjqplotでグラフを作成しています。私はタイムスタンプに問題がありました。私はタイムスタンプを1日に変換することができます。しかしグラフは、その日にゼロを意味する連続しない日がいつあるかを知らない。PHPの時刻を日数に変換して空白の日数を入力し、結果を数えます。
このグラフはログイン統計情報です。ログインしていなければ、データベースには存在しません。私は空白の日にゼロログインがあると定義しなければなりません。私はデータベースになかった空白を埋めるためにループを作った。
しかし、別の問題が発生しました。私が記入した日数は、その存在のためにログインとみなされました。私は$zero
という別の配列を作成して、これらの日を保存し、その日がゼロかどうかをチェックしました。私はちょうどそれを働かせることができませんでした。
データベースの値は、time();
に保存されています。私は、関数convertDates
を使用して日付に変換します。ここから数日があるので、その日のログイン数を調べるために、私はarray_count_values()
を使用して別の配列に格納しました。その後、重複した日を削除して、それぞれのarray_count_values()
キーとペアにしました。ここからは、私が記入した日に確実にする方法を理解することができません、それはゼロとして表示されます。
jqplotグラフでは、ログインがゼロであることはわかりません。私はその日にゼロがあったとPHPに言わせる必要があります。
誰も私にこのアドバイスを得る助けとなるアドバイスはありますか?
ありがとうございます。
です。データベースになかった日を検出するとどういう提案がありますか? – Kyle
@Kyle:それは単純なはずです。編集された記事を参照してください。 – DCoder