Avatar billede compac Seniormester
11. juli 2020 - 22:53 Der er 6 kommentarer og
1 løsning

Sortering med æ,ø,å - visning i index

Jeg er ved at lave en formular hvor jeg skal lave et index hvor æ,ø,å skal indgå.
Det er et udtræk fra en mysql-database. Der skal være en række knapper
- een for hvert bogstav i alfabetet. Man skal kunne klikke på en knap for at få poster med det valgte forbogstav at se. Problemet er at få knapper som udtrækker  de danske tegn.
Jeg har fundet dette:
/*
Get the letter user clicked on and assign it a variable 
Always sanitize user's submited input !!!!!!!
*/
$sort = isset($_GET['firstLetter']) ? filter_input(INPUT_GET, 'firstLetter',FILTER_SANITIZE_URL) : "" ;
if($sort == "") {
$sql = "SELECT * FROM countries ORDER BY name ASC " ;
    }else{
$sql = "SELECT * FROM countries WHERE name LIKE '$sort%' ORDER BY name ASC" ;
    }
$execute = $db->query("$sql");

for ($i = 65; $i < 91; $i++) {
    echo $i;
    printf('<a href="%s?firstLetter=%s">%s</a> | ', $_SERVER['PHP_SELF'] , chr($i), chr($i));
    }
-hvordan udvider jeg den til danske tegn?
Avatar billede claes57 Ekspert
12. juli 2020 - 08:21 #1
Æ = 198
Ø = 216
Å = 197
Så efter } til sidst, så tilføj fx

$i = 198;
echo $i;
    printf('<a href="%s?firstLetter=%s">%s</a> | ', $_SERVER['PHP_SELF'] , chr($i), chr($i));
$i = 216;
echo $i;
    printf('<a href="%s?firstLetter=%s">%s</a> | ', $_SERVER['PHP_SELF'] , chr($i), chr($i));
$i = 197;
echo $i;
    printf('<a href="%s?firstLetter=%s">%s</a> | ', $_SERVER['PHP_SELF'] , chr($i), chr($i));
Avatar billede Slater Ekspert
12. juli 2020 - 09:05 #2
#1: Eller udskift for-løkken med:

foreach ([...range(65, 90), 198, 216, 197] as $i) {

for at det bliver lidt pænere og kortere.
Avatar billede claes57 Ekspert
12. juli 2020 - 20:14 #3
forskellen på en klamphugger og en håndværker ;) Tak for indsparket.
Avatar billede compac Seniormester
13. juli 2020 - 11:59 #4
Når jeg skifter  "for ($i = 65; $i < 91; $i++) { " ud med
  " foreach ([range(65, 90), 198, 216, 197] as $i) { " forventer at det er et array man arbejder med.
Hvordan skal jeg formulere løkken for at bruge "foreach"
Avatar billede Slater Ekspert
13. juli 2020 - 13:08 #5
#4: Jeg er ikke helt med. Løkken bliver det samme, variablen $i vil i begge tilfælde bare være et tal der repræsenterer et tegn.

Du får f.eks. præcis det samme output fra

for ($i = 65; $i < 91; $i++) {
    var_dump($i);
}

og

foreach ([...range(65, 90), 198, 216, 197] as $i) {
    var_dump($i);
}

- bortset fra de tre ekstra tegn. Dog forudsætter det at du kører med en rimelig ny version af PHP for at kunne bruge splat operatoren (...) på den måde.
Hvis du kører med en ældre udgave, kan du f.eks. bruge den lidt grimmere kode:

$chars = range(65, 90);
array_push($chars, 198, 216, 197);
foreach ($chars as $i) {
    var_dump($i);
}

i stedet.
Avatar billede compac Seniormester
13. juli 2020 - 13:21 #6
Ja, man skal gøre som der bliver sagt. Jeg fik ikke de tre punktummer med foran range.
Tak for hjælpen.
Avatar billede Slater Ekspert
13. juli 2020 - 14:56 #7
Og tak Claes. Mit svar var bare en kortere udgave af hans :)
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