Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Dzielenie na zdania
Forum PHP.pl > Forum > Przedszkole
dmateo
Witam,

Przeglądałem tematy, jednak nie znalazłem odpowiedniego rozwiązania.

Chciałbym podzielić wypowiedź na zdania. Funkcja explode odpada, gdyż podzieli także skróty. Tj "Kiedyś tam, np. wczoraj." podzieli na dwa zdania.

W związku z tym pomyślałem, że dobre będzie przygotowanie wzorca i użycie preg_match_all. Posiadam tablice wczytana z pliku zawierającą wykaz polskich skrótów, dlatego też pomyslałem, że stworze wzorzec, który brałby pod uwagę wszystkie znaki przed kropką, chyba, że przed kropką jest jeden z elementów tablicy. Pomyślałem, że zaczne na razie od najprostszego, czyli dzielenia
na zdania na razie bez uwzględnienia skrótów.

Problem dotyczy wzorca, po napisaniu

  1. <?php
  2. $pattern ='/.*. /';
  3. ?>


Zwraca mi tablice z cala wypowiedzia, niepodzielona.

Oczywiście jeśli pomysł jest inny, nie musi to zostać w ten sposób rozwiązane.
wookieb
Pregmatch sie tak dobrze nie sprawdzi.
Lepiej zrobic cos takiego
1) Rozbijasz ciag wedlug . za pomoca explode.
2) iterujesz tablice
3) dla elementu sprawdzasz czy ostatnie słowo jest skrotem, jezeli tak to element laczysz z nastepnym elementem tablicy.

Nastepny element tablicy znajdziesz za pomoca http://php.net/next
Sadze ze bedzie szybsze od preg_matcha i latwiejsze do ewentualnej modyfikacji
dmateo
Czy jest funkcja (w manualu nie znalazłem, a szukałem, bo wcześniej właśnie takie rozwiązanie brałem pod uwagę), która nie tylko usunie następny element tablicy, ale i przesunie kolejne? Tj. załata powstałe w ten sposób dziury

Bo jeśli przejde tablice foreachem, to co stanie się po połączeniu z następnym elementem? czy foreach później przejdzie do tego elementu i też będzie go sprawdzał?
wookieb
Nie musisz łatac.
Jeżeli używasz pętli foreach to raczej musisz elementy wrzucać do nowej tablicy.
Jeżeli używasz for to zobacz coś takiego i jaki otrzymasz efekt:
  1. <?php
  2. $arr=array(1,2,3,4,5,6);
  3. $ile=count($arr);
  4.  
  5. for($i=0; $i<$ile; $i++)
  6. {
  7.    if(isset($arr[$i]))
  8.    {
  9.        // wykonuj cos
  10.        unset($arr[$i+1]);
  11.        echo $arr[$i];
  12.    }
  13. }
  14. ?>


Teraz już będziesz wiedział, że łatanie nie jest wymagane.

Ba, jest jeszcze takie coś fajnego. Tylko tutaj musisz raczej wspomóc się dodatkową zmienna licznikiem.
  1. <?php
  2. while($el=next($arr))
  3. {
  4. // tylko elementu ktore wystepuja w tablicy
  5. }
  6. ?>
dmateo
Wydaje mi się, że to wyczerpuje temat, dzięki smile.gif
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.