/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Tælle forekomster i en fil samt sætte fore~
Fra : Mads Madsen


Dato : 23-02-06 22:03

Hej Gruppe
Jeg skal have lavet en funktion der kan tælle forekomster i en fil
samt sætte forekomsterne i rækkefølge.

Filens indhold ser således ud:

Ib
Peter
Rene
Grethe
Peter
Ib
Peter
Peter
Peter

funktionen skulle så kunne finde ud af at:
5 Peter
2 Ib
1 Grethe
Altså både finde ud af forekomster og derefter sætter dem i
rækkefølge.

Jeg ved ikke om det er følgende funktion jeg skal have fat i
"array_count_values", men kan ikke rigtig komme videre

Håber på lidt spark-igang-hjælp

Mvh Mads


 
 
Per Thomsen (24-02-2006)
Kommentar
Fra : Per Thomsen


Dato : 24-02-06 01:28

Mads Madsen wrote:
> Hej Gruppe
> Jeg skal have lavet en funktion der kan tælle forekomster i en fil
> samt sætte forekomsterne i rækkefølge.
>
> Filens indhold ser således ud:
>
> Ib
> Peter
> Rene
> Grethe
> Peter
> Ib
> Peter
> Peter
> Peter
>
> funktionen skulle så kunne finde ud af at:
> 5 Peter
> 2 Ib
> 1 Grethe
> Altså både finde ud af forekomster og derefter sætter dem i
> rækkefølge.
>
> Jeg ved ikke om det er følgende funktion jeg skal have fat i
> "array_count_values", men kan ikke rigtig komme videre
>
> Håber på lidt spark-igang-hjælp
>
> Mvh Mads
>

Noget i denne stil måske:

$file = file('filnavn.txt');

foreach($file as $line) {
if( isset($names[$line]) ) {
$names[$line]++;
}
else {
$names[$line] = 0;
}
}

asort($names);

foreach($names as $name => $count ) {
echo $count.' '.$name.'<br/>'."\n";
}

MVH Per Thomsen,
http://www.pert.dk/



Bent Stigsen (24-02-2006)
Kommentar
Fra : Bent Stigsen


Dato : 24-02-06 01:54

Mads Madsen wrote:
> Hej Gruppe
> Jeg skal have lavet en funktion der kan tælle forekomster i en fil
> samt sætte forekomsterne i rækkefølge.
>
> Filens indhold ser således ud:
>
> Ib
> Peter
> Rene
> Grethe
> Peter
> Ib
> Peter
> Peter
> Peter

//indlæs fil i array
$arr_names = file('navne.txt');

//fjern return-tegn i enden
$arr_names = array_map('rtrim', $arr_names);


> funktionen skulle så kunne finde ud af at:
> 5 Peter
> 2 Ib
> 1 Grethe
> Altså både finde ud af forekomster og derefter sætter dem i
> rækkefølge.

//optælling på værdier
$arr_name_count = array_count_values($arr_names);

//Har vi en Rene?
if (isset($arr_name_count['Rene'])) {
//ham vil vi ikke kendes ved
$arr_name_count['Rene'] = 0;
//fjern null-værdier
$arr_name_count= array_filter($arr_name_count);
}

//sorter array i reverse orden
arsort($arr_name_count);

//se hvad det mon blev til
print_r($arr_name_count);


> Jeg ved ikke om det er følgende funktion jeg skal have fat i
> "array_count_values", men kan ikke rigtig komme videre
>
> Håber på lidt spark-igang-hjælp

print_r er en god en at ha', hvis du ikke lige ved om tingene ser
rigtigt ud. Så er det bare at prøve sig frem.


/Bent

Mads Madsen (24-02-2006)
Kommentar
Fra : Mads Madsen


Dato : 24-02-06 09:30

Per Thomsen skrev:

> Mads Madsen wrote:
> > Hej Gruppe
> > Jeg skal have lavet en funktion der kan tælle forekomster i en fil
> > samt sætte forekomsterne i rækkefølge.
> >
> > Filens indhold ser således ud:
> >
> > Ib
> > Peter
> > Rene
> > Grethe
> > Peter
> > Ib
> > Peter
> > Peter
> > Peter
> >
> > funktionen skulle så kunne finde ud af at:
> > 5 Peter
> > 2 Ib
> > 1 Grethe
> > Altså både finde ud af forekomster og derefter sætter dem i
> > rækkefølge.
> >
> > Jeg ved ikke om det er følgende funktion jeg skal have fat i
> > "array_count_values", men kan ikke rigtig komme videre
> >
> > Håber på lidt spark-igang-hjælp
> >
> > Mvh Mads
> >
>
> Noget i denne stil måske:
>
> $file = file('filnavn.txt');
>
> foreach($file as $line) {
> if( isset($names[$line]) ) {
> $names[$line]++;
> }
> else {
> $names[$line] = 0;
> }
> }
>
> asort($names);
>
> foreach($names as $name => $count ) {
> echo $count.' '.$name.'<br/>'."\n";
> }
>
> MVH Per Thomsen,
> http://www.pert.dk/

Ovenståene ligner noget jeg kan bruge - har dog lavet om i linje 10
før stod der 0 hvor der nu står 1 samt linje 15 så den sorter efter
$count i stedet for name, hvilket virker som jeg gerne vil have men den
kommer samtidig med en fejlmeddelse:
Warning: asort() expects parameter 1 to be array, null given in
/home/sv_pokerfundk/test/test1.php on line 17
4 Peter
2 Grethe
1 Ib

<?
$file = file('array.txt');


foreach($file as $line) {
if( isset($names[$line]) ) {
$names[$line]++;
}
else {
$names[$line] = 1;
}

}

asort($count);

foreach($names as $name => $count ) {
echo $count.' '.$name.'<br/>'."\n";

}
?>


Per Thomsen (24-02-2006)
Kommentar
Fra : Per Thomsen


Dato : 24-02-06 17:52

Mads Madsen wrote:
> Per Thomsen skrev:
>
>
>>Mads Madsen wrote:
>>
>>>Hej Gruppe
>>>Jeg skal have lavet en funktion der kan tælle forekomster i en fil
>>>samt sætte forekomsterne i rækkefølge.
>>>
[klip]
>
> Ovenståene ligner noget jeg kan bruge - har dog lavet om i linje 10
> før stod der 0 hvor der nu står 1 samt linje 15 så den sorter efter
> $count i stedet for name, hvilket virker som jeg gerne vil have men den
> kommer samtidig med en fejlmeddelse:
> Warning: asort() expects parameter 1 to be array, null given in
> /home/sv_pokerfundk/test/test1.php on line 17
> 4 Peter
> 2 Grethe
> 1 Ib
>
> <?
> $file = file('array.txt');
>
>
> foreach($file as $line) {
> if( isset($names[$line]) ) {
> $names[$line]++;
> }
> else {
> $names[$line] = 1;
> }
>
> }
>
> asort($count);
>
> foreach($names as $name => $count ) {
> echo $count.' '.$name.'<br/>'."\n";
>
> }
> ?>
>

Det er rigtig nok at der skulle stå 1 og ikke 0, men den anden linje,
skulle du bare have ladet være, så tror jeg du ville få det forventede
resultat.

Læg mærke til at jeg bruger navnene som nøgler i array'et, og asort
sorterer array'et efter værdier _og_ bevarer associationen til nøglen.

NB! Grunden til at du får en fejl er at $count, slet ikke findes på
linje 15.

MVH Per Thomsen,
<http://www.pert.dk/>

Mads Madsen (25-02-2006)
Kommentar
Fra : Mads Madsen


Dato : 25-02-06 19:18

Kan jeg på nogen måde få nedenstående kode til at sorter således
at det flest antal forekommende navne står øverst osv.
array.txt indeholder:
Grethe
Peter
Peter
Peter
Peter
Grethe
Ib

Så tabellen kommer til at se således ud:

--------------------------------------
| 4 | Peter |
--------------------------------------
| 2 | Grethe |
--------------------------------------
| 1 | Ib |
--------------------------------------

pt ser den således ud:

--------------------------------------
| 2 | Grethe |
--------------------------------------
| 4 | Peter |
--------------------------------------
| 1 | Ib |
--------------------------------------

<div align=center>
<table border="1" cellpadding="3" cellspacing="0"
style="border-collapse: collapse" width="300" id="table1"
bordercolorlight="#000000" bordercolordark="#000000">
<?

$file = file('array.txt');


foreach($file as $line) {
if( isset($names[$line]) ) {
$names[$line]++;
}
else {
$names[$line] = 1;
}

}

//asort($name);

foreach($names as $name => $count ) {

echo "<td height=40 width=80>$count</td>";
echo "<td height=40 width=220><p align=center$name</td>";
echo "</tr>";


// echo $count.' '.$name.'<br/>'."\n";

}

?>

</table>
</div>


Mads Lie Jensen (25-02-2006)
Kommentar
Fra : Mads Lie Jensen


Dato : 25-02-06 19:51

On 25 Feb 2006 10:17:36 -0800, "Mads Madsen" <mazmazen@gmail.com> wrote:

>Kan jeg på nogen måde få nedenstående kode til at sorter således
>at det flest antal forekommende navne står øverst osv.
>array.txt indeholder:
>Grethe
>Peter
>Peter
>Peter
>Peter
>Grethe
>Ib
>
>Så tabellen kommer til at se således ud:
>
>--------------------------------------
>| 4 | Peter |
>--------------------------------------
>| 2 | Grethe |
>--------------------------------------
>| 1 | Ib |
>--------------------------------------

><?
>
>$file = file('array.txt');
>
>
>foreach($file as $line) {
> if( isset($names[$line]) ) {
> $names[$line]++;
> }
> else {
> $names[$line] = 1;
> }
>
>}
>
>//asort($name);

Denne linie skal i hvert fald ikke kommenteres ud som du har gjort og så
skal den ændres til:

asort($names, SORT_NUMERIC);

Hvis ikke andet argument er SORT_NUMERIC så sorterer den efter alfabetet
og så vil 11 f.eks komme før 2.

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403

Gartneriet - nu ny indpakning (delvist i hvert fald): http://www.gartneriet.dk/

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste