2016-11-20 3 views
0

訪問者の日付を数えて1ヶ月あたりの訪問数を確認しようとしています&結果をjqueryグラフに投稿しています。php/mysqlで月ごとに訪問者を取得

このコードは「動作します」が、何とかすべてをカウントします* 2。今月に訪問者が1人の場合は2が出力されますが、それはなぜですか?

このコードをもっと小さくするにはどうすればいいですか? $ jan $ febなどはこれを行う方法ではないようですが、私は初心者ですので、このコードをどのようにしてより小さくすることができないのか分かりません。&誰か助けてくれますか?

データベース:

date 
2016-11-17 16:36:12 

PHPの:キーとして月かかる

ここ
$arr = array() 
foreach($dates as $date){ 
    $month = date('m',strtotime($date->date)); 
    $arr[$month][] = $date; 
} 

は、このコードは、配列のANを作成し、その月としてのデータを追加します。

$jan = ''; $feb = ''; $maa = ''; $apr = ''; $mei = ''; $jun = ''; $jul = ''; $aug = ''; $sep = ''; $okt = ''; $nov = ''; $dec = ''; 

    foreach($dates as $date){      
      $month = date_parse_from_format("Y-m-d H:i:s", $date->date); 
      if($month ["month"] == '01'){$jan .= $month ["month"];} 
      if($month ["month"] == '02'){$feb .= $month ["month"];} 
      if($month ["month"] == '03'){$maa .= $month ["month"];} 
      if($month ["month"] == '04'){$apr .= $month ["month"];} 
      if($maand["month"] == '05'){$mei .= $month ["month"];} 
      if($maand["month"] == '06'){$jun .= $month ["month"];} 
      if($maand["month"] == '07'){$jul .= $month ["month"];} 
      if($maand["month"] == '08'){$aug .= $month ["month"];} 
      if($maand["month"] == '08'){$sep .= $month ["month"];} 
      if($maand["month "] == '10'){$okt .= $month ["month"];} 
      if($maand["month "] == '11'){$nov .= $month ["month"];} 
      if($maand["month "] == '12'){$dec .= $month ["month"];} 
    } 
+0

このデータはデータベースから取得していますか? –

+0

はい、mysqlデータベースからです。 –

答えて

0

これを試してみてください値。

+0

こんにちはParth、どうやってこれをエコーし​​ますか?私は$ dateをエコーし​​ようとしましたが、エラーが出て、$ dateをエコーし​​ないようにしてください。助けてください。 –

+0

print_r($ date)を試してみると、var_dump()またはprint_r()を使用してエコー配列を取ることはできません –

0
$visitsPerMonth = []; 
foreach ($dates as $date) { 
    $month = date('m', strtotime($date->date)); 
    $visitsPerMonth[$month]++; 
} 

$ dateがSQLデータベースで作成されている場合は、代わりにGROUP BYクエリを使用します。

jQueryチャートでJSON入力が必要な場合は、$ visitsPerMonthにjson_encode()を使用してください。

+0

thxこれを試してみます! –

0

あなたは、データベース内の訪問データを格納している場合は1人の訪問者、それは出力2意志今月がある場合、あなたはこの

SELECT COUNT(*) FROM visitors YEAR(visited_date) = '2016' GROUP BY MONTH(visited_date) 

のように、月ごとにデータベースクエリからのカウントを取得することができます要件ごととして、 何故ですか?

これは、文字列を連結して文字列の長さを数えているためです。月は2文字であるため、イテレーションごとに反復ごとに2文字が連結されます。 $データは2つの日付2016年11月17日16を有する:$データは1日2016年11月17日夜04時36分12秒

$nov = ''; // at start 
$nov .= $month ["month"]; // date 2016-11-17 16:36:12 
=> $nov .= '11'; //shorthand concatenation php 
=> $nov = $nov . '11'; 
=> $nov = '' . '11'; // as $nov = '' at start 

count($nov); // $nov have value '11' which has 2 character so output will be 2 

ケース2を持っています

ケース1怒鳴るの例を参照してください。 :36:12 2016年11月18日夜4時36分12秒

$nov = ''; // at start 
$nov .= $month ["month"]; // date 2016-11-17 16:36:12 
=> $nov .= '11'; //shorthand concatenation php 
=> $nov = $nov . '11'; 
=> $nov = '' . '11'; // as $nov = '' at start 

今$それに値11を持っている11月

$nov .= $month ["month"]; // date 2016-11-18 16:36:12 
=> $nov .= '11'; //shorthand concatenation php 
=> $nov = $nov . '11'; 
=> $nov = '11' . '11'; // as $nov has vale 11 in it 

count($nov); // $nov have value '1111' which has 4 character so output will be 4 

あなたはあなたのコードがこの

$jan = 0; $feb = 0; $maa = 0; $apr = 0; $mei = 0; $jun = 0; $jul = 0; $aug = 0; $sep = 0; $okt = 0; $nov = 0; $dec = 0; 

    foreach($dates as $date){      
      $month = date_parse_from_format("Y-m-d H:i:s", $date->date); 
      if($month ["month"] == '01'){$jan++} 
      if($month ["month"] == '02'){$feb++;} 
      if($month ["month"] == '03'){$maa++;} 
      if($month ["month"] == '04'){$apr++;} 
      if($maand["month"] == '05'){$mei++;} 
      if($maand["month"] == '06'){$jun++;} 
      if($maand["month"] == '07'){$jul++;} 
      if($maand["month"] == '08'){$aug++;} 
      if($maand["month"] == '08'){$sep++;} 
      if($maand["month "] == '10'){$okt++;} 
      if($maand["month "] == '11'){$nov++;} 
      if($maand["month "] == '12'){$dec++;} 
    } 

のように行う仕事をしたい場合はしかし、私はあなたが

$visitorData = ['01'=>0,'02'=>0,'03'=>0,'04'=>0,'05'=>0,'06'=>0'07'=>0,'08'=>0,'09'=>0,'10'=>0,'11'=>0,'12'=>0]; 
foreach ($dates as $date) { 
    $month = date('m', strtotime($date->date)); 
    $visitorData[$month]++; 
} 

が続いてJSONはそれを養うために、配列をコード化するこのような配列で行うことを提案しますjqueryへ

希望すると便利です。

関連する問題