Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: foreach
Forum PHP.pl > Forum > PHP
attimo
Mam w tablicy przykładowe dane np. komputer, myszka
  1. foreach($tablica as $wartosc) {
  2. if(strpos($wartosc,$znak) == 0) { //sprawdza czy znak jest pierwszą litera w wyrazie
  3. $reszta = strtok($wartosc,$znak); //ucina wszystko po wystapieniu ciagu $znak
  4. } else {
  5. echo 'brak wynikow';
  6. }
  7. }

Problem jest taki, że do zmiennej reszta zapisuje się rowniez drugi wyraz w tablicy dlaczego ?
everth
Bo drugie przejście pętli nadpisuje zmienną reszta? Zresztą $reszta jest lokalna dla pętli foreach (poza nią nie istnieje). Może tak:
  1. function checkCharIsFirst($tablica,$znak) {
  2. $reszta = array();
  3. foreach($tablica as $key=>$wartosc) {
  4. //sprawdza czy znak jest pierwszą literą i ucina wszystko po wystapieniu ciagu $znak i zapisuje jako element tablicy reszta
  5. if(strpos($wartosc,$znak) == 0) $reszta[$key] = strtok($wartosc,$znak);
  6.  
  7. }
  8. return $reszta;
  9. }
  10. //Zastosowanie
  11. $tablica = array('mycha','komp','bezsens');
  12. $reszta = checkCharIsFirst($tablica,'m');
  13. var_dump($reszta) // - pokazuje zawartość tablicy reszta
  14. }
phpion
Cytat(everth @ 28.07.2010, 14:59:58 ) *
Zresztą $reszta jest lokalna dla pętli foreach (poza nią nie istnieje).

Nie siej herezji bo Cię spalą na stosie.
thek
Pytanie. Sprawdzasz czy litera występuje w pierwszym wyrazie każdego elementu tablicy czy tylko pierwszego? Tak czy inaczej ja bym w momencie znalezienia dopasowania walnął break, co mi sprawi, że wyskoczę z pętli.
I fakt... Sieje herezje winksmiley.jpg $reszta jest globalna dla pętli, ale lokalna dla funkcji smile.gif
everth
Niech to, możecie mnie spalić biggrin.gif. Ale i tak dobrze zrobi jak zainicjalizuje zmienną wynikową przed pętlą.
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.