Avatar billede fizk Nybegynder
24. april 2005 - 16:11 Der er 5 kommentarer og
1 løsning

Problem med strpos-script!

Jeg sidder lige og prøver at lave noget søgnins-halløj til min side, så jeg tænkte det ville være smart at bruge en strpos så jeg kan få vist et udsnit af det der blev fundet. Til det har jeg så valgt at bruge strpos, men det ser ikke ud til at virke!
Jeg har flg. kode:

<?
    $streng = "abcdef abcdef abcdef abcdef abcdef abcdef";
    $findme = "a";
    $count = substr_count($streng, $findme);
    echo "Antal fundet: $count<br>";
    echo "Vi søger efter \"$findme\" i strengen \"$streng\"<br />";
    for ($x=0;$x<=$count;$x++)
    {
        $pos = strpos($streng, $findme, $x);
        echo "$x. position: $pos<br>";
    }
?>

Og den første og anden søgning viser da godtnok også at der ligger et a på 0. og 7. karakter, men derefter viser den kun på 7. karakter...
Så vidt jeg kan gennemskue holder den på med at registrere at $x er højere end 1, men det giver ikke nogen mening, for så skulle for() løkken vel have været gået i hegn?
Se evt. http://esbenboye.dk/des5/sites/search.php for output'et ...

Håber der er nogen der kan fortælle mig hvorfor den ikke registrerer de senere forekomster af a ...
Avatar billede barklund Nybegynder
24. april 2005 - 16:25 #1
Tredje argument til strpos er ikke nummeret - derimod positionen. Derfor skal du bruge den gamle position for at finde en nyere:

<?
    $streng = "abcdef abcdef abcdef abcdef abcdef abcdef";
    $findme = "a";
    $count = substr_count($streng, $findme);
    echo "Antal fundet: $count<br>";
    echo "Vi søger efter \"$findme\" i strengen \"$streng\"<br />";
    $pos = 0;
    for ($x=0;$x<=$count;$x++)
    {
        $pos = strpos($streng, $findme, $pos);
        echo "$x. position: $pos<br>";
    }
?>

Så burde det virke :)
Avatar billede atheist Nybegynder
24. april 2005 - 16:35 #2
Det skyldes at strpos() finder den første forekomst at det du søger på.
syntaksen for strpos er:

strpos ( $streng, $search_string, $punkt )
$streng er den du søger gennem,
$search_string er den streng du søger efter
$punkt er den plads i $streng der skal søges fra.

når du kun lægger 1 til $x kommer du fra 0 til 1, og så finder den den på syveren, du springerså videre til at søge fra 2, og så finder den syveren osv.

Du skal ha den til at springe frem til næste forekomst.

vender lige tilbage med noget kode du ka bruge
Avatar billede fizk Nybegynder
24. april 2005 - 16:48 #3
Oho ... Så var det jo der den lå! Troede det var antallet af dem der var fundet i forvejen!
Jeg har lige moddet den lidt, så den starter med at søge fra position 0, da man jo kan risikere at det første tegner det man søger efter!

Det endte med at se sådan her ud:
<?
    $streng = "abcdef abcdef abcdef abcdef abcdef abcdef";
    $findme = "a";
    $count = substr_count($streng, $findme);
    echo "Antal fundet: $count<br>";
    echo "Vi søger efter \"$findme\" i strengen \"$streng\"<br />";
        $pos=-1;
    for ($x=1;$x<=$count;$x++)
    {
        $pos = strpos($streng, $findme, $pos+1);
        echo "$x. position: $pos<br>";
    }
?>
Avatar billede fizk Nybegynder
24. april 2005 - 16:48 #4
Mangler i øvrigt lige et svar og tak for hjælpen!
Avatar billede barklund Nybegynder
24. april 2005 - 16:51 #5
Helt fint :)
Avatar billede barklund Nybegynder
24. april 2005 - 18:40 #6
Tark for points :)
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