array vanuit database splitsen met komma's
ik ben aan het proberen om gegevens uit een database te trekken en deze in een highchart in te lezen.
met veel proberen zijn er al veel dingen gelukt. echter een laatste dingetje wil nog niet lukken.
in onderstaand php script bouw ik uiteraard eerst een db-connectie ($con) op.
ik lees een aantal records in van tabel1. en zet de Timestamp string om naar unixTime in milliseconden. en plak er nog de temperatuur aan vast.
<code>$query = "SELECT * FROM tabel1 WHERE id BETWEEN 100 AND 110";
$sth = $con->query($query) or die($con->error);
$rows = array();
while($r = $sth->fetch_array()){
$timeUnix = strtotime($r['Timestamp']) * 1000;
$rows = [$timeUnix. ", ". $r['temp_uit']];
$result = array();
array_push($result, $rows);
print json_encode($rows, JSON_NUMERIC_CHECK);
}</code>
resultaat van bovenstaande:
["1584462129000, 17.25"]["1584462190000, 17.25"]["1584462251000, 17.25"]["1584462312000, 17.25"]["1584462373000, 17.21"]["1584462434000, 17.21"]["1584462494000, 17.21"]["1584462555000, 17.21"]["1584462616000, 17.21"]["1584462677000, 17.21"]["1584462738000, 17.21"]
maar wat ik eigenlijk moet hebben is: (let op de eerste en laatste dubbel blokhaak en de komma's
[
["1584462129000, 17.25"],["1584462190000, 17.25"],["1584462251000, 17.25"],["1584462312000, 17.25"],["1584462373000, 17.21"],["1584462434000, 17.21"],["1584462494000, 17.21"],["1584462555000, 17.21"],["1584462616000, 17.21"],["1584462677000, 17.21"],["1584462738000, 17.21"]
]
Ik kom er niet meer uit... kan iemand mij helpen?
Gewijzigd op 19/03/2020 15:52:24 door Paul Donkers
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// selecteer enkel wat je nodig hebt in plaats van een *
$query = "SELECT Timestamp, temp_uit FROM tabel1 WHERE id BETWEEN 100 AND 110";
// controleer of je query slaagt en geef anders ook een foutmelding terug
$sth = $con->query($query) or die($con->error);
if($sth === false) {
exit (json_encode(['error' => $sth->error]));
}
// we gaan het resultaat opbouwen en beginnen met een lege array
$result = [];
while ($r = $sth->fetch_array()) {
$timeUnix = strtotime($r['Timestamp']) * 1000;
// met $result[] voegen we een nieuw element aan de array toe
// met round kunnen we een waarde omzetten naar een float type en direct afronden op bijv twee decimalen.
$result[] = [$timeUnix . ", " . round($r['temp_uit'], 2)];
}
print json_encode($result);
?>
// selecteer enkel wat je nodig hebt in plaats van een *
$query = "SELECT Timestamp, temp_uit FROM tabel1 WHERE id BETWEEN 100 AND 110";
// controleer of je query slaagt en geef anders ook een foutmelding terug
$sth = $con->query($query) or die($con->error);
if($sth === false) {
exit (json_encode(['error' => $sth->error]));
}
// we gaan het resultaat opbouwen en beginnen met een lege array
$result = [];
while ($r = $sth->fetch_array()) {
$timeUnix = strtotime($r['Timestamp']) * 1000;
// met $result[] voegen we een nieuw element aan de array toe
// met round kunnen we een waarde omzetten naar een float type en direct afronden op bijv twee decimalen.
$result[] = [$timeUnix . ", " . round($r['temp_uit'], 2)];
}
print json_encode($result);
?>
Gewijzigd op 19/03/2020 16:19:50 door Frank Nietbelangrijk
Gewijzigd op 19/03/2020 16:22:16 door - SanThe -
Ik zou eerder ["1584462129000", "17.25"] etc verwachten?
Wat er nu gebeurt is dat je $rows en $result elke stap van de loop overschrijft.
Dus daar zou ik eerder verwachten $rows[] = [$timeUnix, $r['temp_uit']];
Wat is anders het nut van een string in een subarray stoppen?
En het uitdraaien van $rows doe je uiteraard na het einde van de loop :p.
Thomas van den Heuvel op 19/03/2020 16:21:10:
Ik zou eerder ["1584462129000", "17.25"] etc verwachten?
Ja dat vroeg ik me dus ook af... in dat geval zou regel 18 iets anders worden.
Gewijzigd op 19/03/2020 16:29:40 door Frank Nietbelangrijk
dank voor de uitleg. <script> probeerde ik te gebruiken om zo'n mooi code stukje te krijgen.. maar dat moet dus zijn...
[1167609600000, 0.7537],[1167696000000, 0.7537],
dit is een stukje uit het voorbeeld van highchart. de aanhalingstekens vallen (dacht ik) weg bij JavaScript.
Ik heb nu het script aangepast met de allerlaatste aanpassing van Frank. de output nu is
[[1584462129000,18.19],[1584462190000,18.62],[1584462251000,18.62],[1584462312000,18.62],[1584462373000,18.62],[1584462434000,18.53],[1584462494000,18.7],[1584462555000,18.7],[1584462616000,18.7],[1584462677000,18.79],[1584462738000,19.05]]
Wat eigenlijk helemaal super is. Fijn dat je er overigens ook commentaar enz. bij hebt gezet. zeer duidelijk zo.
Thanx
Gewijzigd op 19/03/2020 17:10:32 door Paul Donkers
Toevoeging op 19/03/2020 17:35:21:
>> de aanhalingstekens vallen (dacht ik) weg bij JavaScript.
Nee dat is niet het geval. En computer en de meeste programmeertalen maken onderscheid tussen getallen en tekst. Tekst staat tussen aanhalingtekens maar getallen niet in de programmeertalen die ik ken.
Toevoeging op 19/03/2020 17:38:35:
De reden dat dit onderscheid gemaakt wordt is omdat je de computer met getallen kunt laten rekenen. In javascript krijg je dit verschil:
en