Gå til innhold

array_count_values


Anbefalte innlegg

Hei sitter med en liten utfordring...som jeg kunne behøvd litt innspill til.

Jeg skal lage en "topp 10" over de mest besøkte sidene mine.

Jeg logger all besøk på alle sidene mine i en tekst-fil med ip, tid, scriptnavn og host. I tekst-filen er infoen delt med mellomrom strek mellomrom ( - ).

Denne filen henter jeg inn i ett array.

Bruker

for($i=0; $i < count($loggfil); $i++){

list($fil_ip,$fil_tid,$fil_side,$fil_host)= split (" - ", $loggfil[$i], 4);

array_push($besokte, $fil_side);

}

for å lage et nytt array for å inneholde kun info om siden det var besøkt.

Men så begynner problemet..

Får å kunne lage en "topp 10" så må jeg plusse samme de som evn.

er like i denne tabellen.

Dette gjør egentlig PHP's funksjon array_count_values. Utskriften er leslig men egner seg ikke for

en webside da den blir seende ut noe som dette:

Array

(

   [1] => 2

   [hello] => 2

   [world] => 1

)

Noen som vet en metode for å få denne informasjonen ut på

den metoden man selv ønsker?

Tar i mot alle tips.

Lenke til kommentar
Videoannonse
Annonse

Her har du et tips:

 

Filbehandlingsoperasjoner er realtivt trege, så det å parse loggen hver eneste gang noen logger på vil bruke århundrer når du har 10000+ besøkende per side.

 

Jeg anbefaler at du har en egen fil som heter teller.cnt eller noe og inkrementere antallet besøkende i den.

 

Men for å pengjøre utskriften slik du ville så kan du

 


<table>

<tr><td>Side</td><td>Besøkende</td></tr>

<?

foreach($MinArray as $Key => $Value)

 echo "<tr><td>$Key</td><td>$Value</td></tr>";

?>

</table>

Lenke til kommentar
Her har du et tips:

 

Filbehandlingsoperasjoner er realtivt trege, så det å parse loggen hver eneste gang noen logger på vil bruke århundrer når du har 10000+ besøkende per side.

 

Jeg anbefaler at du har en egen fil som heter teller.cnt eller noe og inkrementere antallet besøkende i den.

 

Men for å pengjøre utskriften slik du ville så kan du

 


<table>

<tr><td>Side</td><td>Besøkende</td></tr>

<?

foreach($MinArray as $Key => $Value)

 echo "<tr><td>$Key</td><td>$Value</td></tr>";

?>

</table>

Hei

Denne funksjonen her skjer bare inne i admin scriptet.

Det eneste som skjer ved logging er at den legger til en linje i tekst fila.

Prøvde den funksjonen du beskrev og det funket men ikke helt på den måten jeg ønsket...

For at jeg bruker


$tellet = print_r(array_count_values ($besokte),true);

for å telle sammen like navn i det arrayet $besokte.

Den funksjonen du skrev gikk ikke på $tellet men den gikk på

$besokte. Men $besokte er ikke tellet, der står alle sidene under hverandre.Hvis du skjønner.

For det den foreach ga meg som utskrift var:


0 /error.php  

1 /error.php  

2 /gjestebok/index.php  

3 /venner/  

4 /error.php  

5 /error.php

og Ønsker å ha:


/error.php => 4

/gjestebok/index.php => 1

/venner/  => 1

 

Det blir nesten slik med: print_r(array_count_values ($besokte),true)

men den skriver ut med Array (), og uten <br> teksten. Det som ikke er pent.

Array

(

   [1] => 2

   [hello] => 2

   [world] => 1

)

 

Med vennlig hilsen

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...