webForumDet fria alternativet

Alfabetisk lista?

PHPur PHP

7 svar · 432 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#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");
}
Medlem sedan mars 2007845 inlägg
#2

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

Medlem 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).

Medlem 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/.

Medlem 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);
    }
}
Medlem 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");
}
Medlem 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");
}
Medlem 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 åäö.

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