database rows naar php array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Fabian W

Fabian W

20/07/2015 23:25:55
Quote Anchor link
Ik heb de volgende sql code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT rank
FROM pchart
WHERE songid = 228
ORDER BY songid, year, week

Dit geeft de volgende resultaten:
Rank
23
11
7
7
4
5
6
9
12
15
17
22
28
36

Hoe krijg ik dit omgezet naar een php array als deze: $ranking = array(23,11,7,7,4,5,6,9,12,15,17,22,28,36)
Telkens als ik iets probeert kom ik hierop uit: Array ( [0] => Array ( [0] => 23 [rank] => 23 ) [1] => Array ( [0] => 11 [rank] => 11 ) ) etc

Verder wil ik ook een array die meeloopt met het aantal getallen in de vorige array. In dit geval dus $weeks = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14)

Ik weet dat het simpel is, maar ik kan er al een tijdje niet opkomen hoe dit precies te doen.
Gewijzigd op 20/07/2015 23:30:28 door Fabian W
 
PHP hulp

PHP hulp

22/11/2024 18:59:08
 
- Ariën  -
Beheerder

- Ariën -

20/07/2015 23:30:58
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

$result
= mysqli_query("...............");

$ranking = array();
while($ranks=mysqli_fetch_assoc($result)) {
    $ranking[] = $ranks['rank'];
}

?>
 
Fabian W

Fabian W

20/07/2015 23:35:06
Quote Anchor link
Thanks!
Ik werkte eerst met mysqli_fetch_array, maar je moet dus mysqli_fetch_assoc hebben hier.
 
- Ariën  -
Beheerder

- Ariën -

20/07/2015 23:37:48
Quote Anchor link
Volgens mij moet het met mysqli_fetch__array ook werken. Het enige verschil is dat de ene standaard een genummerde array geeft, en de andere niet.
 
Fabian W

Fabian W

20/07/2015 23:43:23
Quote Anchor link
Je hebt gelijk! Ik had de ['rank'] niet op de goede plek staan.

En de genummerde array heb ik nu ook: range (1, count($ranking))
 
- Ariën  -
Beheerder

- Ariën -

20/07/2015 23:46:01
Quote Anchor link
Ik neem aan dat je wel INT gebruikt als datatype? Dat sorteert al makkelijker vanuit MySQL zelf.
 
Fabian W

Fabian W

20/07/2015 23:58:12
Quote Anchor link
int(4) idd.
 
Fabian W

Fabian W

22/07/2015 23:24:27
Quote Anchor link
Ik heb nog 1 probleempje. De array die ik krijg is ["23","11",etc].
Die apostrophes horen er dus helemaal niet. Hoe krijg ik die weg?
Ik vind het sws raar dat de apostrophes verschijnen sinds ik int(4) als datatype heb in mijn database.
Bij de andere array (weeks) krijg ik wel gewoon [1,2,3,4,etc]
 
Thomas van den Heuvel

Thomas van den Heuvel

22/07/2015 23:57:27
Quote Anchor link
Is dat een PHP-array of een JSON-encoded PHP-array?

Alles wat je van MySQL terugkrijgt zijn doorgaans strings. Als je van prepared statements gebruik maakt (wat ik niet zou doen in MySQLi) worden types wel gehonoreerd waarschijnlijk.

Of je moet via het binary protocol een verbinding maken, maar daar kon ik toen ik MySQLi onderzocht verder geen enkele informatie over vinden, enkel dat er zoiets bestond.

EDIT: als je prepared statements gebruikt werk je via het binary protocol.
Gewijzigd op 23/07/2015 00:02:25 door Thomas van den Heuvel
 
Fabian W

Fabian W

23/07/2015 00:00:04
Quote Anchor link
Json.

Dit krijg ik als output: {"status":"ok","data":{"weeks":["46","47","48","49","50","51","52","1","2","3","4","5","6","7"],"ranking":["23","11","7","7","4","5","6","9","12","15","17","22","28","36"]}}
(niet belangrijk, maar ik heb besloten om weeks toch niet om te zetten naar 1,2,3,enz)
 
Thomas van den Heuvel

Thomas van den Heuvel

23/07/2015 00:10:14
Quote Anchor link
Enige experimentatie levert / had geleverd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$test
= array('1','2','5');
echo '<pre>'.json_encode($test, JSON_NUMERIC_CHECK).'</pre>';
?>

Oftewel: gebruik de JSON_NUMERIC_CHECK flag.
Gewijzigd op 23/07/2015 00:10:41 door Thomas van den Heuvel
 
Fabian W

Fabian W

23/07/2015 00:11:43
Quote Anchor link
Thanks!
Dat werkt.
 



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.