Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Mały poroblem [foreach, funkcja]
miej95
post 9.03.2012, 23:39:48
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 9.03.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował miej95 9.03.2012, 23:41:22
Go to the top of the page
+Quote Post
thek
post 9.03.2012, 23:48:21
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Do tego typu zadań o wiele wygodniej posłużyć się wyrażeniami regularnymi. Preg_replace się kłania.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
vonski
post 9.03.2012, 23:51:22
Post #3





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
Go to the top of the page
+Quote Post
miej95
post 10.03.2012, 00:04:13
Post #4





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 9.03.2012

Ostrzeżenie: (0%)
-----


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!!

Ten post edytował miej95 10.03.2012, 00:04:37
Go to the top of the page
+Quote Post
vonski
post 10.03.2012, 00:05:39
Post #5





Grupa: Zarejestrowani
Postów: 292
Pomógł: 89
Dołączył: 27.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował vonski 10.03.2012, 00:05:54


--------------------
Zend Certified Engineer | Microsoft Certified Professional: Programming in HTML5 with JavaScript & CSS3 | Blog
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 05:34