Frågan 26 mars 2009 21:52 #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");
}
drew Medlem sedan mars 2007 845 inlägg $L är ju stor bokstav. Vad förväntar du dig att se?
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).
P Peter S Medlem sedan dec. 2002 5 483 inlägg 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/ .
P pulse Medlem sedan nov. 2003 73 inlägg 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);
}
}
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");
}
drew Medlem sedan mars 2007 845 inlägg 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");
}
P pulse Medlem sedan nov. 2003 73 inlägg 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 åäö.