array vanuit database splitsen met komma's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paul Donkers

Paul Donkers

19/03/2020 15:50:28
Quote Anchor link
Beste allemaal,

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
 
PHP hulp

PHP hulp

29/03/2024 00:08:42
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/03/2020 16:18:56
Quote Anchor link
Waarom begin je met <script> en eindig je met </script> ? dit is voor javascript maar niet voor PHP...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>
Gewijzigd op 19/03/2020 16:19:50 door Frank Nietbelangrijk
 
- SanThe -

- SanThe -

19/03/2020 16:21:07
Quote Anchor link
...
Gewijzigd op 19/03/2020 16:22:16 door - SanThe -
 
Thomas van den Heuvel

Thomas van den Heuvel

19/03/2020 16:21:10
Quote Anchor link
Uhm, je hebt allemaal subarrays bestaande uit een string met hierin twee waarden gescheiden door een komma? Ehhhh? Is dat echt het formaar wat je nodig hebt?

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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/03/2020 16:29:25
Quote Anchor link
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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$result
[] = [$timeUnix, round($r['temp_uit'], 2)];
?>
Gewijzigd op 19/03/2020 16:29:40 door Frank Nietbelangrijk
 
Paul Donkers

Paul Donkers

19/03/2020 17:09:52
Quote Anchor link
Beste Frank,

dank voor de uitleg. <script> probeerde ik te gebruiken om zo'n mooi code stukje te krijgen.. maar dat moet dus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php  ?>
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
 
Frank Nietbelangrijk

Frank Nietbelangrijk

19/03/2020 17:17:27
Quote Anchor link
Nou mooi, success met de charts Paul


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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
alert(123 + 123); // 246


en

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
alert("123" + "123"); // 123123
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.