Avatar billede walden Nybegynder
06. oktober 2005 - 12:11 Der er 9 kommentarer og
1 løsning

top10 liste

Jeg har en række forskellige navne placeret i en txt-fil.

Hvordan kan jeg, via php, finde ud af hvilke navne, der optræder hyppigst og hvordan får jeg php'en til at skrive navnene ud i en top 10 med det hyppigste navn øverst?
Avatar billede hmortensen Nybegynder
06. oktober 2005 - 12:34 #1
En mulighed:

$file = file("navne.txt");
$b = array_count_values($file);
arsort($b);

$x = 0;
foreach ($b as $navn => $antal)
{
    if ($x < 10)
        $x++;
    else
        break;
    echo $navn." - ".$antal."<br>";
}
Avatar billede walden Nybegynder
06. oktober 2005 - 12:44 #2
Der ser jo ud til at virke :-) ... kan det virkelig være så nemt?
Avatar billede walden Nybegynder
06. oktober 2005 - 12:55 #3
Kan jeg få dig til at sætte nogle ord på, hvad det er scriptet gør, så jeg kan lære lidt af det?
Avatar billede hmortensen Nybegynder
06. oktober 2005 - 13:01 #4
Håber det her er forståeligt:

//Henter indhold fra fil, og smider det i et array
//linie for linie
$file = file("navne.txt");

//Gruppere på antallet af forekomster for hver enkelt element
$b = array_count_values($file);

//Sortere arrayet faldende og bibeholder indexet (nøglen)
arsort($b);

//Sætter en variabel til tæler
$x = 0;

//Gennemløber hele arrayet
//
//if sætningen kontrollerer om tælleren er mindre end 10,
//og så ligges der én til, ellers afbrydes gennemkørslen.
foreach ($b as $navn => $antal)
{
    if ($x < 10)
        $x++;
    else
        break;
    echo $navn." - ".$antal."<br>";
}
Avatar billede walden Nybegynder
06. oktober 2005 - 13:09 #5
Det er super .... Hvis jeg nu vil have tallene 1. - 10. stående ud for navnene i listen, kan jeg så ikke bare gøre nogenlunde sådan:

<ol>
<?php
$file = file("top_liste.txt");
$b = array_count_values($file);
arsort($b);

$x = 0;
foreach ($b as $navn => $antal)
{
    if ($x < 10)
        $x++;
    else
        break;
    echo <li>$navn." - ".$antal."</li>";
}
?>
</ol>

Det bliver dog ikke accepteret fordi jeg åbenbart ikke har placeret <li></li> korrekt. Kan du se hvad der er galt?
Avatar billede nielle Nybegynder
06. oktober 2005 - 13:17 #6
Sådan:

echo "<li>" . $navn . " - " . $antal . "</li>";

- og der burde også være en <ul>-tag rundt om <li>-listen.
Avatar billede hmortensen Nybegynder
06. oktober 2005 - 13:18 #7
Der manglede lige et par gnyffer ;)
echo "<li>".$navn." - ".$antal."</li>";
Avatar billede walden Nybegynder
06. oktober 2005 - 13:18 #8
Mange tak !!!
Avatar billede walden Nybegynder
06. oktober 2005 - 13:26 #9
Jeg jo fået (et godt) svar .... men for lige at blive ved ... hvilken betydning har punktummet før og efter de to variabler .$navn. og $antal.?
Avatar billede nielle Nybegynder
06. oktober 2005 - 21:44 #10
Punktummet er simpelthen plus-tegnet for tekst (strenge). Et punktum mellem to variable (eller som her en konstant og en variabel) angiver at er de to skal sættes i forlængelse af hinanden - det kaldes også at konkatenere dem:

$a = 1;
$b = 23;
echo $a + $b;

- giver tallet 24, mens:

$a = 1;
$b = 23;
echo $a . $b;

- giver strengen 123.
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