Avatar billede tipman Juniormester
25. oktober 2021 - 08:19 Der er 8 kommentarer og
1 løsning

Sortere flere array kolonner

Jeg har en tabel med både. De har i kolonner navn, type, sejlnr.
Jeg vil gerne sortere dem efter navn og derefter efter type. Der skal være en kolonne mere i arrayet end jeg sorterer på - altså jeg har 3 kolonner med sorterer kun på de 2. Og hvad hvis jeg kun vil sortere på 1 af dem?

Jeg har nok misforstået noget omkring multisort. Håber nogen kan hjælpe mig lidt videre her.

<?php
include ('hide-filer.php');
include ($filconfig);

//hent både fra database
$sql="SELECT * FROM baade WHERE KLUBID='10'";
$result=$conn->query($sql);
$row = $result->fetch_assoc();
$num=$result->num_rows;

//gem i array
$baad=array();
while($row = $result->fetch_assoc()){
    $baad[$i]['navn']=$row['BAADNAVN'];
    $baad[$i]['type']=$row['BAADTYPE'];
    $baad[$i]['sejl']=$row['SEJLNR'];
    //skriv array
    echo $baad[$i]['navn'].' - '.$baad[$i]['type'].' - '.$baad[$i]['sejl'].'<br>';
    $i++;
}

//sorter array
array_multisort($baad['navn'],SORT_ASC, $baad['type'],SORT_ASC);

//skriv sorteret array igen
$i=0;
echo $baad[$i]['navn'].' - '.$baad[$i]['type'].' - '.$baad[$i]['sejl'].'<br>';
$i++;

?>
Avatar billede Rune1983 Ekspert
25. oktober 2021 - 08:41 #1
Træk sorteringen ud via dit database kald med Order By navn ASC, Type ASC
Avatar billede tipman Juniormester
25. oktober 2021 - 09:35 #2
Det er desværre ikke en løsning, da der skal foregå en masse databehandling af data undervejs. At skrive til og fra databasen tager for lang tid. Det skal foregå i memory.
Avatar billede tipman Juniormester
25. oktober 2021 - 09:36 #3
<?php
include ('hide-filer.php');
include ($filconfig);

$sql="SELECT * FROM baade WHERE KLUBID='10'";
$result=$conn->query($sql);
$row = $result->fetch_assoc();
$num=$result->num_rows;

$i=0;
while($row = $result->fetch_assoc()){
    $baad[$i]['navn']=$row['BAADNAVN'];
    $baad[$i]['type']=$row['BAADTYPE'];
    $baad[$i]['sejl']=$row['SEJLNR'];
    echo $i.' - '.$baad[$i]['navn'].' - '.$baad[$i]['type'].' - '.$baad[$i]['sejl'].'<br>';
    $i++;
}

$columns_1 = array_column($baad, 'type');
$columns_2 = array_column($baad, 'navn');
array_multisort($columns_1,SORT_ASC,$columns_2,SORT_ASC,$baad);
echo '<br><br>';

$i=0;
while($i<$num){
    echo $i.' - '.$baad[$i]['navn'].' - '.$baad[$i]['type'].' - '.$baad[$i]['sejl'].'<br>';
    $i++;
}
?>
Avatar billede acore Ekspert
25. oktober 2021 - 09:49 #4
...god løsning fra #1, men hvis ikke du vil det, så skal du bruge usort(...) i stedet (og så mangler der en løkke omrking dit forsøg på at udskrive det sorterede resultat)
Avatar billede acore Ekspert
25. oktober 2021 - 10:35 #5
Har meget svært ved at se, at #3 skulle virke.
Avatar billede michael_stim Ekspert
25. oktober 2021 - 10:40 #6
Må også ärligt indrömme at det virker lidt som at gå over åen efter vand. Når du henter din data fra databasen og bruger ORDER BY, så har du den jo allerede i en sorteret array.
Avatar billede michael_stim Ekspert
25. oktober 2021 - 10:45 #7
"At skrive til og fra databasen tager for lang tid.": Og du laver jo ikke flere kald til databasen bare fordi der kommer en ORDER BY på.

Men du kan jo have andre grunde til at göre som du gör, men det giver ikke nogen mening med den viden vi har i skrivende stund.
Avatar billede Rune1983 Ekspert
25. oktober 2021 - 11:36 #8
Jeg synes selv at man bør altid sortere så meget som muligt med databasekaldet.

Må man spørge hvilken form for behandling du laver efter dit databsekald og inden du udskriver til sidst?
Avatar billede tipman Juniormester
28. november 2021 - 14:28 #9
Jeg sorterer også fra databasen, når jeg henter data. Men jeg skal lave mange beregninger på mit udtræk og det tager for lang tid at gemme og skrive til database hele tiden. Derfor skal jeg kunne håndtere data udelukkende i arrays.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester