![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 8.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam sobie tablicę z adresami, np.: "contact"=> "bla", "contact/edit" => "ble" Potem pobieram sobie adres strony - PHP Self - i mam np. /contact/edit Sprawdzam sobie (strpos), czy PHP Self = jakiś rekord z tablicy. No i działa, ale np. wyświetli mi treść dla "contact", i dla "contact/edit" - bo adres zawiera /contact/edit Da się zrobić, żeby wyświetliło tylko to, co ma więcej znaków znalezionych? W tym przypadku: /contact/edit |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 8.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Może inaczej wytłumaczę.
Mam zrobione przyjazne linki, a teraz robię router. Mogę to zrobić np. tak: if php self == jakis url z tablicy rozbitej foreach. Ale jeśli np. dodam na końcu id produktu: /contact/edit/451 - to wtedy będzie mi szukało takiego adresu url. A 451 to tylko parametr. Dlatego użyłem strpos. Problem w tym, że mając kilka adresów o podobnej nazwie, np" /contact, /contact/edit, /contact/add to zadziała mi funkcja dla tych wszystkich adresów. Dlatego chcę jakoś z tych znalezionych 3, wybrać ten który ma najwięcej wspólnego z adresem PHP_SELF. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Proste: kolejność adresów w tablicy z której sprawdzasz:
to_jest_tekst_najdłuższy to_jest_tekst to_ iterując po tym na zasadzie "znalazłem - kończę" masz rozwiązanie problemu (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
To przed pętlą zapisz sobie w zmiennej np. $pos=0.
W pętli zapisuj do $pos wynik ze strpos tylko jeśli jest większy niż aktualny $pos, zapisuj również w tym momencie, w innej zmiennej element tablicy. EDIT: obydwa stringi trzeba odwrócić. Ten post edytował trueblue 16.05.2014, 08:01:16 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 8.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki.
Jeszcze muszę to tylko dopracować. Właśnie zdałem sobie sprawę, że te rozwiązanie nie jest dobre. Bo co jeśli mam dwa adresy url o takiej samej ilości znaków? np. /contact/app i /contact/seo ? Ten post edytował Cinamicom 16.05.2014, 08:46:57 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Brnąc w to dalej możesz użyć prostych wyrażeń regularnych (analogicznie jak mod_rewrite w apache).
Prosty strukturalny przykład (idea):
EDIT: zamieszałem coś ze zmienną Ten post edytował Sephirus 16.05.2014, 09:09:37 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 8.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
A jakoś inaczej to zrobić?
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ogólnie, żeby to było dokładne to ja widze 3 opcje:
1. konfiguracja linków w .hatccess z odpowiednimi przekierowaniami 2. zastosowanie wyrażeń regularnych (jak w przykładzie wyżej) 3. zastosowanie funckji sscanf Metoda z strpos nie jest idealna. Bo początek stringu to za mało. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 117 Pomógł: 0 Dołączył: 8.07.2013 Ostrzeżenie: (0%) ![]() ![]() |
Konfiguracja .htaccess odpada. Ma być tam uniwersalna konfiguracja, żebym potem nie musiał grzebać po nim.
Gdyby nie ten opcjonalny dodatkowy parametr, nie było by problemu. Ok, mam pewien pomysł. Link w tablicy by wyglądał np. tak. "contacts/edit/*" => "blable" I teraz potrzebuję odpowiedniego wyrażenia regularnego, który wytnie mi ciąg do znaku "/*". Czyli np. robię to za pomocą explode. Użycie np. tak: http://localhost/Contact/edit/*512 Pięknie działa. Ten post edytował Cinamicom 16.05.2014, 09:53:34 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 15:15 |