webForumDet fria alternativet

Alfabetisk lista?

7 svar · 432 visningar · startad av Guldstrand

GuldstrandMedlem sedan juli 20041 271 inlägg
#1

Vad är det för fel på koden nedan?
Endast "A" till "Z" visas.

for ($i = 97; $i < 123; ++$i)
{
	$l = chr($i);
	$L = chr($i - 32);
	if ($l == $letter)
    print("<b>$L</b>\n");
	else
    print("<a href=?bokstav=$l><b>$L</b></a>\n");
}
drewMedlem sedan mars 2007845 inlägg
#2

$L är ju stor bokstav. Vad förväntar du dig att se?

GuldstrandMedlem sedan juli 20041 271 inlägg
#3

drew skrev:

$L är ju stor bokstav. Vad förväntar du dig att se?

Eh.. ja!?
Jag vill givetvis kunna se ÅÄÖ också, (inte bara a-z).

Peter SMedlem sedan dec. 20025 483 inlägg
#4

97-122 samt (97-32)-(122-32) är ascii-koderna för a-z och A-Z. Att åäö inte finns i direkt anslutning beror på att ascii inte är designat efter det svenska alfabetet. ÅÄÖ hittar du i en utökad ascii-tabell, se ex. http://www.asciitable.com/.

pulseMedlem sedan nov. 200373 inlägg
#5

Kanske:

<?php
$param = "å";
$letters = preg_split("//u", "abcdefghijklmnopqrstuvwxyzåäö", 0, PREG_SPLIT_NO_EMPTY);
foreach($letters as $letter){
    $ucase = mb_strtoupper($letter, "UTF-8");
    if($letter == $param){
        printf("<b>%s</b>" . PHP_EOL, $ucase);    
    }
    else{
        printf("<a href=\"?bokstav=%s\"><b>%s</b></a>" . PHP_EOL, $letter, $ucase);
    }
}
GuldstrandMedlem sedan juli 20041 271 inlägg
#6

Hur löser jag det enklast om jag vill använda mig av den befintliga koden?

if ($letter == "" || strpos("abcdefghijklmnopqrstuvwxyzåäö", $letter) === false)
    $letter = "a";

for ($i = 97; $i < 123; ++$i)
{
	$l = chr($i);
	$L = chr($i - 32);
	if ($l == $letter)
    print("<b>$L</b>\n");
	else
    print("<a href=?bokstav=$l><b>$L</b></a>\n");
}
drewMedlem sedan mars 2007845 inlägg
#7

Du byter ut if-satsen. Och använd inte dubbelflärpar " om du inte måste, enkelflärpar ' körs snabbare.

for ($i = 97; $i < 123; ++$i)
{
	$l = chr($i);
	$L = chr($i - 32);
    if($letter != '' && strpos('abcdefghijklmnopqrstuvwxyzåäö', $letter) !== false)
    print("<b>$L</b>\n");
	else
    print("<a href=?bokstav=$l><b>$L</b></a>\n");
}
pulseMedlem sedan nov. 200373 inlägg
#8

Fast varför vill du inte använda koden jag postade? Den ger samma resultat som din fast den är enklare uppbyggd och du slipper göra massa undantag för att den ska funka med åäö.

126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)