Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP]Oznaczanie imion

Napisany przez: sadistic_son 19.03.2024, 09:20:56

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.

Napisany przez: nospor 19.03.2024, 10:05:16

pokaz jak to robisz teraz

Napisany przez: sadistic_son 19.03.2024, 17:26:03

  1. $imiona=http://www.php.net/array(' Adam ',' Adama',' Adach,',' Adachowi','Michał','Michałem');
  2. $span_imiona=http://www.php.net/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

Napisany przez: nospor 19.03.2024, 17:50:18

ok, powinienes uzyc preg_replace. to uzywa wyrazen regularnych i zalatwiloby tez twoj problem z "spadam"

Napisany przez: sadistic_son 19.03.2024, 18:52:18

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?

Napisany przez: Tomplus 20.03.2024, 00:31:52

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'] = http://www.php.net/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.

Napisany przez: Salvation 20.03.2024, 15:19:26

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.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)