webForumDet fria alternativet

Har problem med eregi och arrayer

PHP

3 svar · 210 visningar · startad av Patrik81

Medlem sedan okt. 2001538 inlägg
Frågan#1

Hejsan.

Jag sitter och jobbar lite med ett script som skall visa de filer som ligger i en mapp och som har en viss filändelse.

Koden jag har nu är ful och ineffektiv, eftersom jag skapar en ny variabel för varje filändelse jag vill lägga till, och sedan får jag skriva till en elseif sats till för varje ny ändelse, och i varje if/elseif sats använder jag mig utav eregi för att kolla om de sista bokstäverna i filsökvägen är samma som filändelsen i just den if-satsen.

Men som sagt, det är ju himla klumpigt.

här är ett litet exempel på hur det ser ut:

$ext1 = "jpg";
$ext2 = "gif";

if (eregi("\.$ext1$", $file)){
     print "<a href=\"$path/$file\">$file</a><br>";
}
elseif (eregi("\.$ext2$", $file)){
     print "<a href=\"$path/$file\">$file</a><br>";
}

och det är jag väldigt missnöd med.
Så jag tänkte att om jag lägger in alla filändelser som skall visas i en array och sedan kör en loop för att loopa igenom hela arrayen typ såhär:

$extensions = array("jpg","gif","txt");
$i = count($extensions);
$i = $i - 1;
for ($counter=0; $counter=$i; $counter++){
     if (eregi("\.$extensions[$counter]$", $file)){
          print "<a href=\"$path/$file\">$file</a>";
     }
}

men det gick inte så bra för jag stöter jämt på ett timeout fel som växlar mellan att ligga på raden med eregi, och raden med for loop starten.

Men hela tanken bakom det hela är ju iaf att jag lägger in alla filändelser i en array som jag sedan loopar igenom ett eregi mönster och sedan om det stämmer skriver ut filerna med den ändelsen å sedan hoppar vidare till nästa ändelse... kan någon knuffa mig i rätt riktning här?

Tack på förhand
MVH Patrik

Medlem sedan feb. 2000280 inlägg
#2

Prova:

for ($i=0; $i<count($extensions); $i++)
{
//kod
}
Medlem sedan nov. 2000857 inlägg
#3

Tänk på att en for-loop fungerar så här:

for ($i=0;$i<10;$i++)
{
echo "$i<br>";
}

Först visar man $i=0; som är startvärdet för $i. sen visar man vad som händer, i detta fallet loopa medans $i är mindre än 10. Sist anger man vad som händer med $i efter varje loop, alltså ökar värdet med ett där.

Så här hade jag nog gjort:

$extensions = array("jpg","gif","txt");
for ($counter=0; $counter<count($extensions); $counter++){
     if (eregi("$extensions[$counter]", $file)){
          print "<a href=\"$path/$file\">$file</a>";
     }
}

Ändrade lite på eregi-funktionen också.
PS. stavas det inte extentions :q :p

Medlem sedan okt. 2001538 inlägg
#4

Ååååh det satt ju så klockrent, bugar å bockar för bägge svaren.
Tack tack tack tack (å tack igen)

MVH Patrik

289 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
162 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
162 ms — ändringar (db)