Alfabetisch sorteren inhoud multidimensionaal array
Ik heb al enkele uren op internet gezocht naar een oplossing maar vond niets dat ik begreep of (voor zover ik kon zien) mijn vraag beantwoorde.
Mijn probleem is als volgt:
Ik haal m.b.v. een query een multidimensionaal array uit de MySQL database.
Query (lijkt me niet relevant maar voor de volledigheid):
$select_query="SELECT titel, auteur FROM boeken WHERE gebied = 'e' AND type = 'b'";
$query_result= mysql_query($select_query)
Het resultaat van de query zijn diverse records met in zowel 'titel' veld als 'auteur' veld woorden (alfanumeriek dus).
Verder slaag ik er als volgt ook in om ze weer te geven op scherm:
WHILE($query_array = mysql_fetch_array($query_result, MYSQL_BOTH))
{
echo $query_array['titel'] . " / " . $query_array['auteur'] . "<P>\n";
}
Echter, ik moet de inhoud van dit array in een tabel weergeven op scherm, alfabetisch gesorteerd op veld 'titel'.
Hierbij mogen de 'key'-waarden ondanks het sorteren niet wijzigen.
Ik heb al wat geëxperimenteerd met uasort maar krijg het niet werkend.
Dit waarschijnlijk omdat ik de uitleg maar half begrijp.
Hopelijk kan iemand hier me duidelijk uitleggen wat ik zou moeten doen om het wel werkend te krijgen.
NOOT: Ik realiseer me dat ik zou kunnen sorteren door middel van de SQL-query maar aangezien ik de array voor verschillende doeleinden moet gebruiken zoek ik dus naar een manier om dit te doen in PHP.
Quote:
Ik realiseer me dat ik zou kunnen sorteren door middel van de SQL-query maar aangezien ik de array voor verschillende doeleinden moet gebruiken zoek ik dus naar een manier om dit te doen in PHP.
Wat bedoel je daarmee? Ik gok dat je op de tabel headers wilt kunnen klikken om te sorten op titel " ASC / DESC " en auteur " ASC / DESC " dat kun je gewoon met mysql doen.
Code (php)
1
2
2
$select_query="SELECT titel, auteur FROM boeken WHERE gebied = 'e' AND type = 'b' ORDER BY titel ASC";
$query_result= mysql_query($select_query)
$query_result= mysql_query($select_query)
overigens als je het perse met php wil doen je misschien aan de volgende functies wat hebt:
http://www.phphulp.nl/php/tutorial/php-functies/sort/152/sort/269/
http://php.net/manual/en/function.uasort.php
Iets in de trant van:
* Haal array binnen d.m.v. query ZONDER het al te sorteren
* Sorteer array alfabetisch op veld (bijvoorbeeld titel) maar laat keys hetzelfde
* Toon (selectie uit) gesorteerde array op scherm in een tabel
* Sorteer zelfde array op ander veld
* Toon weer (selectie) op scherm
* etc.
Ik heb al gekeken naar uasort en, hoewel het blijkbaar zou moeten kunnen daarmee, ik snap gewoon niet hoe ik dat werkend moet krijgen met tekstvelden en een multidimensionale array.
De cmp_function maakt me in de war.
De Sort geeft een output :
Array
(
[0] => Edgar
[1] => Jan
[2] => Klaas
[3] => Piet
)
waarbij ik niet zie hoe ik dit in een tabel kan gieten.
Als je daaraan vast wilt houden, zul je eerst moeten zorgen dat je alle records in een array krijgt. Let op dat het resultaat van mysql_query geen array is. Het is een resultaatset die je eerst nog moet fetchen. Om alles in een array te krijgen, zou je zoiets kunnen doen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$records = array();
while($row = mysql_fetch_assoc($result)) {
$records[] = $row;
}
?>
$records = array();
while($row = mysql_fetch_assoc($result)) {
$records[] = $row;
}
?>
Vervolgens kun je met de sort functie in PHP proberen die array op de juiste manier te sorteren. Maar nogmaals, sorteren in de query is vele malen eenvoudiger.
Iedere keer echter gesorteerd op een andere veldnaam.
Mijn gedachte was dat meerdere malen een query naar de database sturen (en die records ophalen) voor meer belasting/vertraging zou zorgen dan slechts eenmalig die records ophalen en vervolgens meerdere malen te sorteren, afhankelijk van vereiste sorteerwens.
Maak ik hier een denkfout mee ?