Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Znalezienie wyrazu po ostatniej spacji w stringu
Forum PHP.pl > Forum > Przedszkole
shpaque
Witam dzisiaj wink.gif

pytanie mam - mam zmienną, która przechowuje imię i nazwisko - nie byloby problemu gdyby ktos np nie podawal dwóch imion, albo mial imie "Ludwik von Bethoven" lub "Castro vel Diana von Schlockenhaus-Mardid"

dlatego pytam jak znalezc slowo po ostatniej spacji?
nospor
Znajdujesz osstatnie wystapienie spacji
http://php.net/manual/en/function.strrpos.php

A potem pobierasz wszystko za ta spacja
http://php.net/manual/en/function.substr.php
SmokAnalog
A ja powiem tak: przechowując w jednej zmiennej imię i nazwisko godzisz się na to, żeby nie było wiadomo, które to imię, a które nazwisko. Co z tego, że jedna pani nazywa się Anna Maria Jopek, skoro druga nazywa się Karolina Korwin Piotrowska (tak, bez myślnika)?
Pyton_000
Albo np.

  1. $words = explode(' ', $fullName);
  2.  
  3. echo end($words);


Poza tym to co wyżej napisał @Smok. Do tego dojdzie że ktoś pisze raz nazwisko a potem imię, a czasami odwrotnie...
shpaque
no na to juz wplywu nie mamy przeciez...

nawet jak robie w formularzu oddzielnie imie i nazwisko zdarzalo sie ze gosc mi wpisywal w plu imie - imie i nazwisko, a w polu nazwisko - nazwisko...

takze mialem: "Stefan Krawężnik Krawężnik"
SmokAnalog
Dokładnie tak. Dlatego powinny być osobne pola do podawania tych danych. A jeśli już koniecznie musi być razem, to jakiś żywy człowiek powinien tego doglądać na bieżąco i poprawiać. Widzę to tak: skrypt, który rozdziela automatycznie, jeśli imię istnieje w bazie imion, a nazwisko nie. Jeśli na odwrót, to też automat rozwiązuje jako nazwisko imię. W sytuacjach spornych sprawa nie jest rozwiązana i czeka na klepnięcie od żywego człowieka. Ale serio serio - jeśli masz formularz, to zrób dwa osobne pola (imię i nazwisko) lub trzy osobne pole (pierwsze imię, drugie imię i nazwisko).

Szpaczku - taki błąd użytkownika jest jednak znacznie łatwiejszy do skorygowania. Te osobne pola to nie jest wyprawa na Mount Everest - po prostu jest to lepszy formularz. Inna sprawa, jeśli nie potrzebujesz znać czyjegoś imienia. Wtedy imię i nazwisko w jednym polu jest okej, bo jakkolwiek ktoś się podpisze, stanowić to będzie tylko informację do wglądu.
shpaque
nie generalnie mi to jest potrzebne do sortowania po naziwsku kiedy mam imie i naziwsko razem ;`) tylko do tego
SmokAnalog
No i w porządku, tylko przygotuj się na całkiem sporo błędów. Sortujesz w tablicy PHP czy w bazie danych? Bo to samo można zrobić bezpośrednio na bazie.
shpaque
na szczescie w tablicy php
nospor
Cytat
na szczescie w tablicy php
zmienisz zdanie jak przyjdzie ci pracowac z wieksza iloscia danych.
shpaque
wtedy dam oddzielnie imie i naziwsko tu bede mial finalnie ok 400 osob
trzczy
Jeszcze sposób nr 50 wink.gif
  1. preg_replace('/.*\s(?=\w)|\s/', '', ' fdsafasd fdsadfsaf fdsa fdsa Obama ')
  2. ); //string(5) "Obama"
https://3v4l.org/nakiR
SmokAnalog
Jak już robisz wyrażenie regularne, to rób to chociaż jak najprościej. Wystarczy zwykłe preg_match z wzorcem [^\s]+$ - bez nawiasów i innych pierdół.

Ale to nie jest zadanie dla wyrażenia regularnego. Ani nie będzie czytelnie, ani wydajnie.
trzczy
@SmokAnalog, twój regex można napisać prościej:

\w+$

ale on i tak nie uwzględnia spacji po nazwisku. A do tego funkcja preg_match nie zwraca stringa, tylko integer. Stringa trzeba wyciągać z tablicy.
SmokAnalog
Celowo nie zrobiłem \w+$, bo każdy nie-biały znak powinien być uznany za część nazwiska, chociażby po to, żeby zobaczyć w nim śmieci. Tak na logikę.
trzczy
To o czym piszesz też można skrócić:

\S+$

zaś to, czy uznać nazwisko z cyfrą w środku, to rzeczywiście do dyskusji.
SmokAnalog
Tu masz rację, zapomniałem o \S. smile.gif
Pyton_000
Pieprzycie Panowie... Najlepszym rozwiązaniem będzie postawienie JVM i odpalenie tego w Elasticsearch a potem obróbka w Pythonie. szybko, łatwo, przyjemnie...
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.