Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Oznaczanie imion
Forum PHP.pl > Forum > Przedszkole
sadistic_son
cześć, w mini-forum mam obecnie funkcję oznaczania imion. Generalnie jest zdefiniowana i niezmienna lista użytkowników i imię każdego z nich jest pisane innym kolorem w treści postów na forum. Obecnie mam to zorganizowane w niezbyt elegancki sposób, co prawda działa, ale raczej zużywa zbędne zasoby. Chcę to przerobić. Każde imię oczywiście odmienia się przez przypadki, więc dla takiego 'Michał' mamy 14 przypadków - liczba pojedyncza i mnoga. W tekście użytkownik oczywiście wpisuje imię w poprawnym przypadku, więc pozostaje tylko podmiana z 'Michał' lub 'michał' lub 'Michal' lub 'michal' na <span id="michal">ucfirst(strtolower($wpisane_imie))</span>. Jak to najlepiej rozwiązać?
Dodatkowo wpada problem imienia 'Adam' gdzie zwykłe str_replace spowoduje mi spustoszenie np. w słowie 'spadam'.

Zapodajcie pls pomysły. Dzięki.
nospor
pokaz jak to robisz teraz
sadistic_son
  1. $imiona=array(' Adam ',' Adama',' Adach,',' Adachowi','Michał','Michałem');
  2. $span_imiona=array('<span class="Adam"> Adam </span>','<span class="Adam"> Adama</span>','<span class="Adam"> Adach</span>','<span class="Adam"> Adachowi</span>','<span class="Michal">Michał</span>','<span class="Michal">Michałem</span>');
  3.  
  4. // while wyświetlający rekordy z postami a wewnątrz pętli:
  5. $row['3']=str_ireplace($imiona,$span_imiona,$row['3']);

Oczywiście te tablice mają dużo więćej elementów. Zostawiłem tylko kilka. Imion mam kilka, plus każdy ma jakąś ksywkę i jej warianty, plus wszystko odmienione przez przypadki to daje kilkaset elementów.
W sumie mogę jeszcze elementy niezmienne, tj '<span class="' oraz '</span>' wywalić przed nawias smile.gif
nospor
ok, powinienes uzyc preg_replace. to uzywa wyrazen regularnych i zalatwiloby tez twoj problem z "spadam"
sadistic_son
Nie bardzo mam pomysł jak. Przecież to też będzie wymagać od groma wyrażeń regularnych wyjdzie tego niewiele mniej niż po prostu powymieniane wszystkich wariantów. No ale ok, i co potem, też to musi być wewnątrz while prawda?
Tomplus
Skoro tak dużo imion i systemów, to należy sobie to zoptymalizować. Np. po cholerę jest <span> w tablicy?

Wykorzystaj sobie jakąś bazę, albo jakąś uproszczoną formę notacji np. JSON:

  1.  
  2. foreach($json as $format_imienia) {}
  3. $row['3'] = preg_replace("/({$format_imienia}?[a-z]{1,})/", "<span title='{$format_imienia}'>".$odmiana."</span>", $row['3']);


Ale to kropla w morzu zmian.

Np. w tekscie:
Kod
Adam jest na dworze Karola z Adamczychy.
Padam dzisiaj ze zmęczenia.


Wykryje mi Adam, Adamczychy, ale już nie Padam.
Ale jak dodam parametr "/({$format_imienia}?[a-z]{1,})/i" - to już Padam mi oznaczy.
Salvation
Musi to być słownik. Najlepiej już z odmianami imion. Wtedy można "kolorować" imiona przez JS-a nawet, żeby przerzucić to na procesor użytkownika.
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-2024 Invision Power Services, Inc.