Avatar billede acmed Nybegynder
12. februar 2005 - 02:39 Der er 6 kommentarer

Sortere file array

Jeg bruger dette script:

$lines = file ($filename);
$lines_sort = sort($lines);

// Loop through our array
foreach ($lines_sort as $line) {
print '- '.$line.' -<br>';
}

Af en eller anden grund går det galt når jeg sorterer array´et.
Filen jeg sorterer ser sådan ud:
andreasc@test.dk
andreasc2@test.dk
andreasc3@test.dk
andreasc4@test.dk
etc.

Alle linier ender med \n
Avatar billede acmed Nybegynder
12. februar 2005 - 02:40 #1
Fejlen:

Warning: Invalid argument supplied for foreach() in /mnt/data/www/html/tester.php on line 32

Fejlen kommer ikke hvis jeg fjerner linien
$lines_sort = sort($lines);
Avatar billede gammelhat Nybegynder
12. februar 2005 - 02:49 #2
hvis du kigger på funktionens prototype ser du hvorfor http://dk2.php.net/sort
Avatar billede alister_crowley Nybegynder
12. februar 2005 - 02:49 #3
korrekt brug af sort() er sådan her

sort($fruits);
reset($fruits);

du mangler at reset'e, prøv det.
Avatar billede olebole Juniormester
12. februar 2005 - 03:04 #4
<ole>

Hvis du bruger en for-løkke, der i sig selv er hurtigere end en foreach-løkke, får du yderligere den gevindst, at du kan springe 'reset' over:

$lines = file ($filename);
$lines_sort = sort($lines);

// Loop through our array
for($i=0,$j=count($lines_sort); $i<$j; $i++) {
    $s .= '- '.$line[$i].' -<br>';
}
print $s;

Den syntaks er en del hurtigere.

/mvh
</bole>
Avatar billede olebole Juniormester
12. februar 2005 - 03:08 #5
Baahhh ... der fik jeg copy/pasted for meget  :)

$lines = file ($filename);
sort($lines);

// Loop through our array
for($i=0,$j=count($lines); $i<$j; $i++) {
    $s .= '- '.$lines[$i].' -<br>';
}
print $s;
Avatar billede olebole Juniormester
12. februar 2005 - 03:17 #6
I øvrigt er file() binary-safe, hvilket du ikke har brug for til dette - men gør funktionen temmelig langsom. Dette gør det samme, men er igen en hel del hurtigere:

$lines = file_get_contents($filename);
$lines = explode("\n", $lines);
sort($lines);

// Loop through our array
for($i=0,$j=count($lines); $i<$j; $i++) {
    $s .= "- ".$lines[$i]."\n -<br>";
}
print $s;
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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