Avatar billede walden Nybegynder
13. november 2005 - 10:05 Der er 2 kommentarer og
1 løsning

udvidet top 10 liste

Hej

Jeg har tidligere fået fin hjælp til en top liste (af hmortensen http://www.eksperten.dk/spm/653765)

Jeg havde en række forskellige navne placeret i en txt-fil og ville gerne have de navne, der optræder hyppigst skrevet ud i en top 5 liste.

hmortensens svar var:

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

$x = 0;
foreach ($b as $navn => $antal)
{
    if ($x < 5)
        $x++;
    else
        break;
    echo $navn." - ".$antal."<br>";
}

og det var perfekt.

Nu har jeg så et tillægsspørgsmål, som jeg håber I kan hjælpe med.

Det ovenstående script udskriver en liste, der ser således ud:

Svend Pedersen - 32
Lotte Hansen - 28
Katrine Olesen - 28
Peter Klausen - 28
Lise Johansen - 17

Som man kan se, har tre af navnene den samme hyppighed (28). Kan jeg få scriptet til at udvide top listen automatisk, (i dette tilfælde med to), hvis der er et eller flere navne, der har samme hyppighed? Dvs. at listen kommer til at se således ud (tallene behøver ikke optræde):

1. Svend Pedersen - 32
2. Lotte Hansen - 28
  Katrine Olesen - 28
  Peter Klausen - 28
3. Lise Johansen - 17
4. Kasper Jensen - 15
5. Louise Svendsen - 12
Avatar billede bromer Nybegynder
13. november 2005 - 10:43 #1
Bliver det så ikke noget i stil med:

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

$x = 0;
$last = null;
foreach ($b as $navn => $antal)
{
    if ($x < 5 && $last != $antal)
        $x++;
    else
        break;
    echo $navn." - ".$antal."<br>";
}
?>
Avatar billede terrak Nybegynder
13. november 2005 - 11:11 #2
<?php

$vis = 5;
$udvidet = 1;

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

$x = 0;
$duplicate = array();
foreach ($b as $navn => $antal)
{

    if ($udvidet == 1 && in_array($antal,$duplicate)) {
    $x--;
}
    if ($x < $vis) {
        $x++;
}    else {
        break;
}
 
    $duplicate[] = $antal;
    echo $navn." - ".$antal."<br>";
}

?>

Og husk at tekstfilen skal ende med en tom linje (dvs. enter efter sidste navn), ellers virker file() ikke som antaget.
Avatar billede walden Nybegynder
13. november 2005 - 12:14 #3
Terrak: tak for den elegante løsning, der ser ud til at virke uden problemer.
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