Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Znalezienie wyrazu po ostatniej spacji w stringu
shpaque
post 16.01.2018, 17:57:58
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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?

Ten post edytował shpaque 16.01.2018, 17:58:18
Go to the top of the page
+Quote Post
nospor
post 16.01.2018, 18:03:56
Post #2





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
SmokAnalog
post 16.01.2018, 18:10:05
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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)?
Go to the top of the page
+Quote Post
Pyton_000
post 16.01.2018, 18:15:44
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
shpaque
post 16.01.2018, 18:20:16
Post #5





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


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"
Go to the top of the page
+Quote Post
SmokAnalog
post 16.01.2018, 18:21:49
Post #6





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.

Ten post edytował SmokAnalog 16.01.2018, 18:23:53
Go to the top of the page
+Quote Post
shpaque
post 16.01.2018, 18:26:31
Post #7





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


nie generalnie mi to jest potrzebne do sortowania po naziwsku kiedy mam imie i naziwsko razem ;`) tylko do tego
Go to the top of the page
+Quote Post
SmokAnalog
post 16.01.2018, 18:28:06
Post #8





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
shpaque
post 16.01.2018, 18:31:58
Post #9





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


na szczescie w tablicy php
Go to the top of the page
+Quote Post
nospor
post 16.01.2018, 18:34:12
Post #10





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Cytat
na szczescie w tablicy php
zmienisz zdanie jak przyjdzie ci pracowac z wieksza iloscia danych.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
shpaque
post 16.01.2018, 18:37:11
Post #11





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


wtedy dam oddzielnie imie i naziwsko tu bede mial finalnie ok 400 osob
Go to the top of the page
+Quote Post
trzczy
post 16.01.2018, 19:11:36
Post #12





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


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

Ten post edytował trzczy 16.01.2018, 19:17:52
Go to the top of the page
+Quote Post
SmokAnalog
post 16.01.2018, 19:15:47
Post #13





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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.

Ten post edytował SmokAnalog 16.01.2018, 19:17:00
Go to the top of the page
+Quote Post
trzczy
post 16.01.2018, 19:36:18
Post #14





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


@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.
Go to the top of the page
+Quote Post
SmokAnalog
post 16.01.2018, 19:50:04
Post #15





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
trzczy
post 16.01.2018, 19:55:37
Post #16





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


To o czym piszesz też można skrócić:

\S+$

zaś to, czy uznać nazwisko z cyfrą w środku, to rzeczywiście do dyskusji.

Ten post edytował trzczy 16.01.2018, 19:55:56
Go to the top of the page
+Quote Post
SmokAnalog
post 16.01.2018, 19:59:04
Post #17





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Tu masz rację, zapomniałem o \S. smile.gif
Go to the top of the page
+Quote Post
Pyton_000
post 16.01.2018, 21:23:35
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Pieprzycie Panowie... Najlepszym rozwiązaniem będzie postawienie JVM i odpalenie tego w Elasticsearch a potem obróbka w Pythonie. szybko, łatwo, przyjemnie...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 06:58