2016-06-09 6 views
0

Ich habe eine PHP-PDO-Abfrage, es wählt Jahr, Monat und Tag aus der Datenbank. Es zählt auch die Anzahl der Zeilen, die jeden Tag hat:Wie formatiere ich eine PHP-foreach-Schleife richtig?

SELECT 
    dateYear, dateMonth, dateDay, 
    count(dateDay) AS count_days 
    FROM just_ink 
    WHERE dateMonth = :month AND dateYear = :year AND deleted = 0 
    GROUP BY dateYear, dateMonth, dateDay 

Wenn Echo der Ergebnisse:

foreach ($result as $subResult) { 
    foreach ($subResult as $row) { 
     $year = $row['dateYear']; 
     $month = $row['dateMonth']; 
     $day = $row['dateDay']; 
     $count = $row['count_days']; 
     echo $month . " " . $day . " " . $year . " " . $count . " lines, "; 
    } 
} 

Dies gibt einen Wert wie: Das bedeutet, 7. Juni

June 7 2016 3 lines, June 8 2016 1 lines, 

hat 3 Formen und 8. Juni hat 1 Form.

Jetzt für die Formatierung verwende ich Highcharts grundlegenden Liniendiagramm. Die Daten müssen auf diese Weise formatiert werden:

<script> 
$(function() { 
    $('#container').highcharts({ 
    title: { 
     text: 'Monthly New Forms', 
     x: -20 //center 
    }, 
    xAxis: { 
    title: { 
       text: 'Day of the Month' 
    }, 
     categories: [ 
     '1', '2', '3', '4', '5', 
     '6', '7', '8', '9', '10', 
     '11', '12', '13', '14', '15', 
     '16', '17', '18', '19', '20', 
     '21', '22', '23', '24', '25', 
     '26', '27', '28', '29', '30', 
     '31' 
     ] 
    }, 
    yAxis: { 
     title: { 
      text: 'Month of June' 
     }, 
     plotLines: [{ 
      value: 0, 
      width: 1, 
      color: '#808080' 
     }] 
    }, 
    tooltip: { 

    }, 
    legend: { 
     layout: 'vertical', 
     align: 'right', 
     verticalAlign: 'middle', 
     borderWidth: 0 
    }, 
    series: [{ 
     name: 'Number of New Forms Per Day', 
     data: [1, 2, 3, 4, 5, 6] 
    }] 
}); 
}); 
</script> 

Wo die Kategorien die x-Achsentitel sind, und die Reihendaten die Frequenz eines jeden Tages ist. Wenn ich also wie

darstellen wollen

June 7 2016 3 lines, June 8 2016 1 lines, 

Die Seriendaten müssten

0, 0, 0, 0, 0, 0, 3, 1, 0, etc. 

Irgendwelche Ideen suchen?

+1

ein Array bauen, um die Art und Weise highcharts es will und verwenden 'json_encode()' es Javascript zu senden. – jeroen

+0

@jeroen Wie baut man ein Array? – KoalatyCode

+0

Wie @jeroen sagte, mache ein php-Array (oder assoziatives Array speziell) und übertrage es in ein echo json_encode. Mehr Infos hier: http://php.net/manual/en/function.json-encode.php – dylpickle

Antwort

0

Zuerst ein Array mit Elementen für jeden Tag des Monats erstellen:

$counts = array_fill(1, 31, 0); 

Dann in der Schleife, für den Tag im Eintrag füllen:

foreach ($subresult as $row) { 
    $day = $row['dateDay']; 
    $counts[$day] = $row['count_days']; 
} 
$counts = array_values($counts); // because json_encode treats it as an object if indexes don't start at 0 
echo json_encode($counts); 

Ich bin nicht sicher, warum Sie wählen dateYear und dateMonth, da dies die Eingaben für die Abfrage sind. Sie müssen diese Variablen nicht in der Schleife festlegen, da sie immer dasselbe sind.

+0

Dies scheint zu funktionieren, das Ergebnis ist [0,0,0,0,0,0,0, "3" , "1", 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] Aber es scheint 1 Null hinzugefügt zu haben, also wo "3" am 7. int sein soll ist es am 8. – KoalatyCode

+0

Ich habe das Startelement von 0 auf 1 geändert. Ich bin so an 0-basierte Arrays gewöhnt, aber das ist nicht richtig für Tage des Monats. – Barmar

+0

Das Hinzufügen von 2 Codezeilen hat folgendes bewirkt: unset ($ counts [0]); AND $ counts = array_values ​​($ counts); Vielen Dank für die Hilfe! – KoalatyCode

0
$highchartdata = [] 

foreach ($subResult as $row) { 
    $highchartdata[$row['dateDay']] = $row['count_days']; 
    } 

echo json_encode($highchartdata); 

erhalten die oben json Daten vom Server

obj = JSON.parse(data);// parse the json data 
for (i = 1; i <=31; i++) { 
    if(!obj[i]) // if ith key is not defined make it 0 
    obj[i]=0; 
    } 

console.log(obj); 
+0

echo json_encode (#highchartsdata); diese echos: { „7“: „3“, „8“: „1“} aber in dem Konsolenprotokoll: „Nicht abgefangene Reference: Daten nicht definiert sind“ – KoalatyCode

+0

können Sie mich in Ihrem Quellcode erhalten verknüpfen? – flamelite

Verwandte Themen