Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Moduł tagów
Forum PHP.pl > Forum > Przedszkole
djgarsi
Witam. Jestem w trakcie pisania modułu dla pewnego serwisu. Jest to moduł tagów.
Oto mój kod który niby działa, lecz nie do końca:
  1. <?php
  2.  
  3. $string = "jakis super fajnie dlugi ciag znakow.";
  4.  
  5. $string = preg_replace('#[.,)(!]+#', '', $string);
  6. $text = explode(' ', $string);
  7. $words = array();
  8. $len = 0;
  9.  
  10. foreach ($text as $str) {
  11. $word = preg_replace('#[^a-ż]+#i', '', $str);
  12. if (mb_strlen($word) > 0) {
  13. $words[] = $word;
  14. $len += mb_strlen($word);
  15. }
  16. }
  17.  
  18. echo'Tagi: ';
  19.  
  20. for($i=0;$i<=$len;$i++)
  21. {
  22. echo '<a href="/tagi/'.$words[$i].'.html">'.$words[$i].'</a> ';
  23. }
  24.  
  25. ?>


A oto wyświetlane błędy:
Kod
Notice: Undefined offset: 8 in D:\Serwer\www\index.php on line 23
Notice: Undefined offset: 8 in D:\Serwer\www\index.php on line 23
Notice: Undefined offset: 9 in D:\Serwer\www\index.php on line 23
Notice: Undefined offset: 9 in D:\Serwer\www\index.php on line 23
Notice: Undefined offset: 10 in D:\Serwer\www\index.php on line 23
Notice: Undefined offset: 10 in D:\Serwer\www\index.php on line 23
Notice: Undefined offset: 11 in D:\Serwer\www\index.php on line 23
... itd.


Co robię źle w powyższym kodzie?
nospor
iterujesz po tablicy $words aż do $len. Sek w tym, że $len to nie jest liczba elementów tablicy a liczba liter ze wszystkich słów tablicy. Nic wiec dziwnego, że dostajesz bledy.
phpion
Proszę poprawić temat wątku na lepiej opisujący problem.
djgarsi
Czy funkcja end($tablica) będzie odpowiednia?
nospor
Rety, dostałeś podane rozwiązanie jak na tacy a ty w ogole nie myslisz :/

Nie: $len += mb_strlen($word);
a: $len ++;
Tak? Tak, skoro $len ma byc liczbą elementów.
A najlepiej wywal tego for i poprostu uzyj FOREACH

foreach($words as $w)
{
echo '<a href="/tagi/'.$w.'.html">'.$w.'</a> ';
}
djgarsi
Nospor, może i będzie to dobre:)
Ja jednak oczekiwany efekt uzyskałem dzięki konstrukcji
for($i=0;$i<max(array_keys($words));$i++)
Pozdrawiam i dziękuję za wskazanie mojego błędu.
nospor
O zgrozo....... tongue.gif
Podalem ci DWA rozwiązania. Ty wymysliles trzecie totalnie zakrecone. To tak jakbys do swojej kuchni w swoim domu wchodzil przez okno sąsiadów :/

Jak już to:
$c = count($words);
for($i=0;$i<$c;$i++)

Skoro nie chcesz słuchać rad starszych to chociaż pisz optymalnie z podstawową znajomosci funkcji ktorych raczysz używać
djgarsi
No to proszę wyjaśnij mi jaka jest różnica między count($words) a max(array_keys($words)) ?
nospor
Wynikowo? Zadna.

Tak samo jak w wyniku nie ma żadnej różnicy między:
1) Iśc do kuchni z pokoju przez przedpokój
2) Iść do kuchni przez balkon do sąsiadów a potem od nich z okna kuchni do naszej kuchni.
Wynik i tu i tu jest takim sam, z tym, że w drugim przypadku więcej się namęczysz i możesz skręcić kark.

Także Twoj "potworek" max(array_keys($words)) akurat dla tej tablicy zwróci taki sam wynik co count() z tym, że Twoj potworek wykona przy tym wiecej operacji i się bardziej zmęczy.
Fakt, różnica zapewne dla Twoich danych nie będzie w ogóle widoczna, ale Ty teraz uczysz się programować i uczysz się programować cholernie nieoptymalnie, bez pomyślunku i durnym kombinowaniem zamiast po prostu użyć coś, co do danej rzeczy jest stworzone smile.gif
djgarsi
O widzisz;) I nie mozna było tak od razu że Twoje rozwiązanie jest bardziej optymalne?smile.gif
Jeszcze raz dzieki za pomoc:)
nospor
No przeciez napisałem od razu:
Cytat
Ty wymysliles trzecie totalnie zakrecone. To tak jakbys do swojej kuchni w swoim domu wchodzil przez okno sąsiadów :/

Poza tym, jak ktoś bardziej doświadczony podaje ci 3 rozwiązania to naprawdę nie wymyślaj już czwartego
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.