Avatar billede madsass Nybegynder
27. marts 2004 - 16:55 Der er 12 kommentarer og
1 løsning

Ord bruge flest gange

Hej Allesammen..
Kan man på nogen som helst måde lave en php kode der undersøger $row[besked] for det ord der er brugt flest gange.??
Altså hvis nu at ordet "Hej" er blevet brugt flest gange i $row[besked] så skal den udskrive ordet på siden..

Jeg tror godt at man kan på en eller anden måde.. Men hvordan.??

Med Venlig Hilsen
Mads Bjørck // Madsass.dk
Avatar billede Slettet bruger
27. marts 2004 - 17:49 #1
Måske noget med...

starte med at fjerne alle kommaer og punktummer og andre sjove tegn.

Kaste al teksten ind i et array, ved at dele hvor der er mellemrum.

Fjerne dubletter i arrayet, og sortere det på en eller anden måde efter antal gange ordet optræder. Herefter er det blot at tage hhv. første/sidste element og udskrive det.
Avatar billede detox Nybegynder
27. marts 2004 - 17:57 #2
En lille hjemmebrygget funktion til formålet:

<?php
$str = 'Her er en lille test hvor ordet ER forekommer 2 gange';
echo FlestOrd($str);

function FlestOrd($str) {
    $str = ' '.strtolower($str).' ';
    $a = str_word_count($str, 1);
    $b = array_unique($a);
    foreach($b as $ord) {
        $arr[$ord] = substr_count($str, ' '.$ord.' ');
    }
    arsort($arr, SORT_NUMERIC);
    reset($arr);
    return key($arr);

}
?>
Avatar billede detox Nybegynder
27. marts 2004 - 18:09 #3
Jeg er ikke helt tilfreds med str_word_count(). Prøv denne istedet:

function FlestOrd($str) {
    $str = strtolower($str);
    preg_match_all("/\b(\w+)\b/Um", $str, $a);
    $b = array_unique($a[1]);
    foreach($b as $ord) {
        $arr[$ord] = substr_count($str, ' '.$ord.' ');
    }
    arsort($arr, SORT_NUMERIC);
    reset($arr);
    return key($arr);
}
Avatar billede madsass Nybegynder
27. marts 2004 - 22:19 #4
Det er til brugersystemet på min side.. Der skal den vise hvilket ord brugeren mest har brugt..
Hvad gør jeg galt i denne kode.. Den udskriver ikke noget:

$tjekker = mysql_query("SELECT besked FROM forum_msg WHERE navn = '$_GET[bruger]'");
$findes = mysql_numrows($tjekker);
if($findes == 1){
$tjek_r = mysql_query("SELECT besked FROM forum_msg WHERE navn = '$_GET[bruger]'");
$r = mysql_fetch_array($tjek_r);
$str = $r["besked"];
echo "Ord brugt mest i forummet:&nbsp;".flestord($str);

function flestord($str) {
$str = strtolower($str);
preg_match_all("/\b(\w+)\b/Um", $str, $a);
$b = array_unique($a[1]);
foreach($b as $ord) {
$arr[$ord] = substr_count($str, ' '.$ord.' ');
}
arsort($arr, SORT_NUMERIC);
reset($arr);
return key($arr);
}
}
Avatar billede detox Nybegynder
27. marts 2004 - 22:31 #5
Du behøver ikke lave forespørgslen 2 gange og functionen skal ikke være inden for if løkken. Prøv:

$tjekker = mysql_query("SELECT besked FROM forum_msg WHERE navn = '$_GET[bruger]'");
if (mysql_numrows($tjekker) == 1) {
    $r = mysql_fetch_row($tjekker);
    $str = $r[0];
    echo "Ord brugt mest i forummet:&nbsp;".flestord($str);
}
function flestord($str) {
    $str = strtolower($str);
    preg_match_all("/\b(\w+)\b/Um", $str, $a);
    $b = array_unique($a[1]);
    foreach($b as $ord) {
        $arr[$ord] = substr_count($str, ' '.$ord.' ');
    }
    arsort($arr, SORT_NUMERIC);
    reset($arr);
    return key($arr);
}
Avatar billede madsass Nybegynder
27. marts 2004 - 23:10 #6
Udskriver stadig intet..
Avatar billede detox Nybegynder
27. marts 2004 - 23:16 #7
Selve koden ser ok ud, så du må i gang med at debugge. Start med at tjekke at $_GET['bruger'] indeholder hvad den skal. Og at der kun forekommer præcis én række i tabellen med dette navn.
Avatar billede madsass Nybegynder
28. marts 2004 - 10:46 #8
Jeg har kigget helt igennem koden.. Og den udskriver stadig ikke noget..
Måske kan koden ikke tjekke MySQL rows igennem.??
Avatar billede detox Nybegynder
28. marts 2004 - 14:07 #9
Hmmm, scriptet fungerer ok her, når jeg tester med en af mine egne tabeller. Har du prøvet at udskrive $r[0]?
Avatar billede madsass Nybegynder
28. marts 2004 - 14:53 #10
Det skal lige siges at i forum_msg der er dér kan der godt være mere end 1 række med $_GET[bruger].. I forum_msg gemmes alle de kommentarer der er blevet postet på tråde i forummet..
Avatar billede detox Nybegynder
28. marts 2004 - 15:50 #11
Hvis der er mere en en række fejler denne betingelse:

if (mysql_numrows($tjekker) == 1) {

Så er jeg ikke sikker på om du vil tjekke alle kommentarer for den enkelte bruger, eller om det bare er en af dem?
Avatar billede detox Nybegynder
28. marts 2004 - 15:55 #12
Hvis du vil tjekke alle kommentarer fra brugeren, kan du prøve med:

$tjekker = mysql_query("SELECT besked FROM forum_msg WHERE navn = '$_GET[bruger]'");
if (mysql_num_rows($tjekker) > 0) {
    $str = '';
    while ($r = mysql_fetch_row($tjekker)) {
        $str .= $r[0];
    }
    echo "Ord brugt mest i forummet:&nbsp;".flestord($str);
}
Avatar billede madsass Nybegynder
28. marts 2004 - 21:13 #13
Nu virker et.. Således skulle koden se ud:
$tjekker = mysql_query("SELECT besked FROM forum_msg WHERE navn = '$_GET[bruger]'");
function flestord($str) {
    $str = strtolower($str);
    preg_match_all("/\b(\w+)\b/Um", $str, $a);
    $b = array_unique($a[1]);
    foreach($b as $ord) {
        $arr[$ord] = substr_count($str, ' '.$ord.' ');
    }
    arsort($arr, SORT_NUMERIC);
    reset($arr);
    return key($arr);
}
if (mysql_num_rows($tjekker) > 0) {
    $str = '';
    while ($r = mysql_fetch_row($tjekker)) {
        $str .= $r[0];
    }
    echo "Ord brugt mest i forummet:&nbsp;".flestord($str);
}

Tusind tak :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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

IT-JOB

Politiets Efterretningstjeneste

AI/ML udvikler i PET

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Ingeniør til Satellitkommunikation

Everllence

Software Engineer