Avatar billede horizon Nybegynder
26. august 2009 - 13:04 Der er 7 kommentarer og
1 løsning

substr_count() til kun at tælle hele ord

Jeg sidder og bakser lidt med et script hvor jeg skal tælle antal gange et bestemt ord forekommer

jeg har så prøvet med substr_count() men den tæller antal forekomster af et bestemt ord også selvom det er en del af et andet ord.

f.eks. hvis jeg vil finde antal gange "bil" fremkommer i "bil biler bille bil" skal jeg kun have den til at returnere 2, men den returnerer 4.

Jeg synes ikke jeg ellers kunne finde noget i manualen eller via google der kunne hjælpe mig...
Avatar billede majbom Novice
26. august 2009 - 13:21 #1
kan du ikke tælle med mellemrum foran og bagved, samt andre kombinationer?

der er sikkert en smartere måde?
Avatar billede w13 Novice
26. august 2009 - 14:15 #2
Avatar billede majbom Novice
26. august 2009 - 14:37 #3
-> #2 - snedigt :) tænkte nok der var en smartere måde, kendte den bare ikke
Avatar billede psychopixi Nybegynder
26. august 2009 - 14:39 #4
Det er muligvis ikke den bedste løsning, men du kan sagtens bruge følgende:

<?php
$test = "bil bille biler bil";
$test = explode(" ",$test);
$num_test = count(array_keys($test,"bil"));
echo $num_test; // outputs 2.
?>
Avatar billede horizon Nybegynder
09. september 2009 - 15:51 #5
Ja, det er en mulighed

Men jeg fandt en anden løsning som jeg fandt ud af også kan bruges til sætninger

<?php

$string = "bil biller bil bill kører i bil";
$word = "bil";

function numWords($word, $string){

    preg_match_all('/\b'.$word.'\b/i', $string, $arr);

    return count($arr[0]);

}

Tror bare jeg skulle tage mig sammen og få styr på reg.exp.
?>
Avatar billede psychopixi Nybegynder
09. september 2009 - 15:59 #6
#5
explode er en del hurtigere end regex, så hvis du ikke skal andet end at tælle antal gange et ord optræder i en sætning, vil jeg stadig anbefale noget a la mit eksempel.
Avatar billede horizon Nybegynder
10. september 2009 - 09:12 #7
Jeg giver dig ret i at explode er hurtigere, men der kommer en øvfuld problemer hvis der er punktum, kolon eller andre tegn foran og efter et ord og så skal jeg ud i noget af en if else kørsel efter hvad jeg lige kan regne ud.
Avatar billede psychopixi Nybegynder
10. september 2009 - 09:44 #8
Tja.. jeg har løst problemet ved at bruge:

<?php
function num_str($string,$search){
    $signs = array(
        ",",
        ".",
        ";",
        ":",
        "-"
    );

    $split = explode(" ",str_replace($signs," ",strtolower($string)));
    return $num = count(array_keys($split,$search));
}

$string = "Dette er en test. test test, Test.. Test-test";
$search = "test";
$num = num_str($string,$search);

echo "'$search' blev fundet $num gange i sætningen '$string'";
?>

// output: 'test' blev fundet 6 gange i sætningen 'Dette er en test. test test, Test.. Test-test'

Denne kode giver dig ligeledes muligheden for selv at vælge hvilke tegn, den skal dele op ved. Altså kunne man gøre såden at test-test ikke tæller med. Dette kan være meget snedigt, da test-test sandsynligvis vil være et sammensat ord, og altså ikke længere det du søger efter.
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