Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Mały poroblem [foreach, funkcja]
Forum PHP.pl > Forum > Przedszkole
miej95
Witam!
Jako że jestem tu pierwszy raz, więc witam Was!

Mój problem polega na tym, iż funkcja którą napisałem nie przyniosła oczekiwanych efektów. A więc ma ona odnaleźć w stringu wyraz zaczynający się od http:// i podmieniać go na link. Zrobiłem to tak:
  1. function createUrl($string)
  2. {
  3. $wyrazy = explode(" ", $string);
  4. foreach($wyrazy as $wyraz)
  5. {
  6. if (substr($wyraz, 0, 7) == "http://")
  7. {
  8. $wyraz .= "<a href=\"" . $wyraz . "\">" . $wyraz . "</a>";
  9. }
  10. }
  11.  
  12. return implode(' ', $wyrazy);
  13. }

Proszę o podpowiedzi i poprawienie mnie.
Z góry dziękuję smile.gif
thek
Do tego typu zadań o wiele wygodniej posłużyć się wyrażeniami regularnymi. Preg_replace się kłania.
vonski
Pętla foreach działa na kopii tablicy nie na oryginale, czyli jak masz taki kod:

  1.  
  2. foreach($wyrazy as $wyraz)
  3. {
  4. $wyraz = '......';
  5. }
  6.  


to $wyraz nie jest tutaj elementem z oryginalnej tablicy, ale z jej kopii. Jednym z wyjść jest tutaj zastosowanie referencji (od PHP5), czyli tak:

  1. foreach($wyrazy as &$wyraz)
  2. {
  3. $wyraz = '....';
  4. }


tutaj już działasz na oryginalnych elementach
Możesz też zastosować inny wariant foreach-a:

  1. foreach($wyrazy as $key => $wyraz)
  2. {
  3. $wyraz = '........';
  4. $wyrazy[$key] = $wyraz;
  5. }


Jednak pomimo wszystko wydaje mi się, że powyższa funkcja nie zastępuje stringa linkiem tylko jak już dokleja linki na końcu poszczególnych stringów, ale może takie było twoje zamierzenie to ok smile.gif
miej95
Ok.
  1. function createUrl($string)
  2. {
  3. $wyrazy = explode(" ", $string);
  4. foreach($wyrazy AS $key => $wyraz)
  5. {
  6. if (substr($wyraz, 0, 7) == "http://")
  7. {
  8. $wyraz .= "<a href=\"" . $wyraz . "\">" . $wyraz . "</a>";
  9. $wyrazy[$key] = $wyraz;
  10. }
  11. }
  12.  
  13. return implode(' ', $wyrazy);
  14. }

Wiec teraz zmienia się na link tyle że jak znajdzie link to daje go 2 razy raz normalnie a drugi raz z tagiem <a>
Np:
  1. echo (createURL("http://forum.php.pl"));

wyjscie:
  1. http://forum.php.pl<a href="http://forum.php.pl">http://forum.php.pl</a>


------------------
Dobra mam już. Oczywiście zły operator: nie ".=" a "="
Dzięki za pomoc!!
vonski
Cytat
Wiec teraz zmienia się na link tyle że jak znajdzie link to daje go 2 razy raz normalnie a drugi raz z tagiem <a>


tak więc zacytuję sam siebie wink.gif

Cytat
Jednak pomimo wszystko wydaje mi się, że powyższa funkcja nie zastępuje stringa linkiem tylko jak już dokleja linki na końcu poszczególnych stringów


Zamień operator konkatenacji na operator przypisania i powinno być ok.
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.