2016-05-13 3 views
1

Das ist so seltsam, muss ein Tippfehler sein, den ich nicht finden kann!
PHP if: findet Datum von jun, aber nicht aug

Zuerst erhalte ich Daten von mySql und platziere sie in einem PHP-Array.
Dann mache ich ein var-Dump zu sehen, was ich habe:

var_dump($stmt->fetchAll()); 

ich jetzt se Ergebnis:

[5341]=> array(2) { 
    ["datum"]=> string(19) "2015-07-04 06:47:50" 
    ["usag"]=> string(3) "avf" 
} 
[5342]=> array(2) { 
    ["datum"]=> string(19) "2015-08-03 13:42:15" 
    ["usag"]=> string(3) "avf" 
} 

Also, ich von beiden Monaten 07 & 08 zur Folge haben konnte!
Jetzt möchte ich Schleife alle Ergebnisse warf und es in einem arrangierten Array platzieren.
Ich möchte es nach Jahr, und nach Monat, und einfach das Ergebnis zählen.

while($row = $stmt->fetch()){ 
    //Check if thisYear 
    if(substr($row['datum'], 0, 4) == $thisYear){ 
     //Check if Jan 
     if(substr($row['datum'], 5, 2) == 01){ 
      $totalElementCount[$thisYear]['jan']++; 
     } 
     //Check if Feb 
     elseif(substr($row['datum'], 5, 2) == 02){ 
      $totalElementCount[$thisYear]['feb']++; 
     } 
     //Check if Mar 
     elseif(substr($row['datum'], 5, 2) == 03){ 
      $totalElementCount[$thisYear]['mar']++; 
     } 
     //Check if Apr 
     elseif(substr($row['datum'], 5, 2) == 04){ 
      $totalElementCount[$thisYear]['apr']++; 
     } 
     //Check if Maj 
     elseif(substr($row['datum'], 5, 2) == 05){ 
      $totalElementCount[$thisYear]['maj']++; 
     } 
     //Check if Jun 
     elseif(substr($row['datum'], 5, 2) == 06){ 
      $totalElementCount[$thisYear]['jun']++; 
     } 
     //Check if Jul 
     elseif(substr($row['datum'], 5, 2) == 07){ 
      $totalElementCount[$thisYear]['jul']++; 
     } 
     //Check if Aug 
     elseif(substr($row['datum'], 5, 2) == 08){ 
      $totalElementCount[$thisYear]['aug']++; 
     } 
     //Check if Sep 
     elseif(substr($row['datum'], 5, 2) == 09){ 
      $totalElementCount[$thisYear]['sep']++; 
     } 
     //Check if Okt 
     elseif(substr($row['datum'], 5, 2) == 10){ 
      $totalElementCount[$thisYear]['okt']++; 
     } 
     //Check if Nov 
     elseif(substr($row['datum'], 5, 2) == 11){ 
      $totalElementCount[$thisYear]['nov']++; 
     } 
     //Check if Dec 
     elseif(substr($row['datum'], 5, 2) == 12){ 
      $totalElementCount[$thisYear]['dec']++; 
     } 
    }//if thisYear 

    //Check if prevYear 
    elseif(substr($row['datum'], 0, 4) == $prevYear){ 
     //Check if Jan 
     if(substr($row['datum'], 5, 2) == 01){ 
      $totalElementCount[$prevYear]['jan']++; 
     } 
     //Check if Feb 
     elseif(substr($row['datum'], 5, 2) == 02){ 
      $totalElementCount[$prevYear]['feb']++; 
     } 
     //Check if Mar 
     elseif(substr($row['datum'], 5, 2) == 03){ 
      $totalElementCount[$prevYear]['mar']++; 
     } 
     //Check if Apr 
     elseif(substr($row['datum'], 5, 2) == 04){ 
      $totalElementCount[$prevYear]['apr']++; 
     } 
     //Check if Maj 
     elseif(substr($row['datum'], 5, 2) == 05){ 
      $totalElementCount[$prevYear]['maj']++; 
     } 
     //Check if Jun 
     elseif(substr($row['datum'], 5, 2) == 06){ 
      $totalElementCount[$prevYear]['jun']++; 
     } 
     //Check if Jul 
     elseif(substr($row['datum'], 5, 2) == 07){ 
      $totalElementCount[$prevYear]['jul']++; 
     } 
     //Check if Aug 
     elseif(substr($row['datum'], 5, 2) == 08){ 
      $totalElementCount[$prevYear]['aug']++; 
     } 
     //Check if Sep 
     elseif(substr($row['datum'], 5, 2) == 09){ 
      $totalElementCount[$prevYear]['sep']++; 
     } 
     //Check if Okt 
     elseif(substr($row['datum'], 5, 2) == 10){ 
      $totalElementCount[$prevYear]['okt']++; 
     } 
     //Check if Nov 
     elseif(substr($row['datum'], 5, 2) == 11){ 
      $totalElementCount[$prevYear]['nov']++; 
     } 
     //Check if Dec 
     elseif(substr($row['datum'], 5, 2) == 12){ 
      $totalElementCount[$prevYear]['dec']++; 
     } 
    }//if prevYear 
} //while 

Wenn Schleife finnished i das andere tun: var_dump($totalElementCount); an sich, wenn der Code korrekt funktioniert. Aber irgendwie 2015-08 & 2015-09 fehlt!
WARUM?

array(2) { 
    [2015]=> 
    array(10) { 
    ["jan"]=> 
     int(240) 
    ["feb"]=> 
     int(821) 
    ["mar"]=> 
     int(1190) 
    ["apr"]=> 
     int(1046) 
    ["maj"]=> 
     int(892) 
    ["jun"]=> 
     int(1036) 
    ["jul"]=> 
     int(117) 
    ["okt"]=> 
     int(1246) 
    ["nov"]=> 
     int(1035) 
    ["dec"]=> 
     int(697) 
} 
+4

Lieber mir .... verwenden so etwas wie '$ totalElementCount [$ thisYear] [strtolower (Datum ('M', (strtotime ($ row [ 'Datum']))]] 'all diese' if' Tests für jeden einzelnen Monat zu eliminieren –

+5

Und Ihr Problem ist '08' und' 09' in Ihren Vergleichen .... Zahlen (wenn Sie Stringwise statt mit '' 08'' und ''09'' wäre ok) mit einer führenden' 0 'sind __oktal__, und' 08' und '09' sind ungültige Oktalwerte und werden als' 0' behandelt. –

+0

@MarkBaker Ich weiß, dass es einen besseren Weg geben muss Eine For-Schleife, aber das ist über meinem Versprechen: D Sie können mir gerne eine Bette zeigen r Weg :) –

Antwort

2

Eine kurze und einfache Methode, um Ihr Problem zu lösen, sind die folgenden

  1. Iterate durch die Ergebnisse der Abfrage
  2. nicht Millionen von elseif/if Bedingungen verwenden. Go für Schalter/Fall wenn nötig. In diesem Fall ist keine if-Bedingung erforderlich, da Sie den Monat mit analysieren können.
  3. Analysieren Sie Ihr Datum, anstatt es zu vergleichen. Ihr aktueller Code vergleicht den Monat mit der Oktalzahl mit einer führenden 0 anstelle der dezimalen.

    while($row = $stmt->fetch()){ 
        $year = substr($row['datum'],0,4); //Define year of the data record 
        $month = strtolower(date('M', (strtotime($date)))); //parse month to 3 letter short form, e.g. "jan" 
        $totalElementCount[$year][$month]++; //increment totalElemCount of the defined year and month 
    } 
    

Wenn Sie Ihren Code halten wollen (was und nicht DRY zu halten hart ist), fügen Sie einfach Anführungszeichen um jede Zahl, die Sie vergleichen Sie das Datum mit, so dass Sie einen String-Vergleich machen.

elseif(substr($row['datum'], 5, 2) == 02){ 

zu

elseif(substr($row['datum'], 5, 2) == "02"){ 
Verwandte Themen