Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Działanie funkcji strtok()
Forum PHP.pl > Forum > Przedszkole
scr1pt3r
Witam.

Otóż męczy mnie następujaca sprawa.

Mam sobie taki kod.

  1. $comment = "To jest mój komentarz." ;
  2.  
  3. $zeton = strtok( $comment, " " ) ;
  4. echo $zeton ."</br></br>" ;
  5.  
  6. while( $zeton != "" )
  7. {
  8. $zeton = strtok( " " ) ;
  9. echo $zeton . "<br/>" ;
  10. }


A więc $zeton = "To"; i nic więcej to nie zawiera !
Tylko dlaczego potem dzięki pętli magicznie pojawia się:
jest
mój
komentarz.

Skąd, jak w pętli tylko występuje zmienna $zeton, a on zawiera tylko ciąg "To". Nie mogę tego zrozumieć.
Vhaeraun
Z samego początku manuala do strtok:
Cytat
Note that only the first call to strtok uses the string argument. Every subsequent call to strtok only needs the token to use, as it keeps track of where it is in the current string.

Czyli nawet jak wywołasz drugi raz funkcję strtok() bez parametru string, to i tak funkcja będzie pamiętała jaki string był wysłany do niej na początku.
scr1pt3r
A paradoks typu, wywołanie tej funkcji n-razy w jednym czasie smile.gif ?
darko
Ta funkcja ma swój własny wewnętrzny stos, w którym przechowuje wartość pierwszego argumentu, a wywołanie n-razy "w jednym czasie" to tak na prawdę wywołanie n razy w mikro-odstępach czasu, jedno po drugim. Przy pierwszym wywołaniu wartość parametru $str zostaje zapamiętana.
scr1pt3r
I tak uważam, że to jakoś dziwnie działa...

Użyłem:

  1. $string = "This is first example";
  2. $secendString = "To jest drugi przyklad";
  3. $tok = strtok($string, " ");
  4. $secendTok = strtok($secendString, " ");
  5.  
  6. while ($tok !== false) {
  7. echo "Word=$tok<br />";
  8. $tok = strtok(" ");
  9. }


A uzyskałem:

Word=This
Word=jest
Word=drugi
Word=przyklad

Jak widać to ma taką wade jak zapis do pliku dwóch rzeczy w jednym czasie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.