Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak znalezc roznice w takich samych stringach
Forum PHP.pl > Forum > PHP
misty
Czesc, mam nastepujacy problem: musze znalezc fragment stringa w stringu. Wszystko jest ok bo do tego moge uzyc metody strpos, ale zauwazylam ze nie zawsze mi dziala. Przyjrzalam sie blizej i o to co wyszlo:

Moja metoda wyglada mniej wiecej nastepujaco:

  1. function test($text, $strToSearch) {
  2. $index = strpos($text, $strToSearch);
  3. var_dump($index);
  4. }


w niektorych przypadkach jednak string($strToSearch) sie nie wynajduje (mimo tego ze istnieje). Wyswietlilam sobie $text i przypisalam go do nowej zmiennej:

  1. function test($text, $strToSearch) {
  2.  
  3. $newText = "to jest moj tekst z $text";
  4. $index = strpos($newText, $strToSearch);
  5. var_dump($index);
  6. }



i teraz string wynajduje sie za kazdym razem (czyli $index != false). O co jednak chodzi? dlaczego jak przepisalam wartosc zmiennej $text to $newText to dla $newText mi dziala zawsze?

Wypisalam sobie $text i $newText- sa te same. ich dlugosci-te same. sprawdzilam typ poprzez getype - oba string.

Nie mam zielonego pojecia o co chodzi?? Czy ktos z Was moze ma?

pzdr,
misty
blooregard
Może spróbuj z strstr():

http://pl.php.net/manual/en/function.strstr.php
Crozin
Stawiam na to, że rozwiązanie problemu znajdziesz w czerwonej ramce na stronie manuala: http://php.net/manual/en/function.strpos.php
misty
czesc,
dzieki za odpowiedzi.

@blooregard - takie samo zachowanie dla opisanych przeze mnie przypadkow jak dla strpos

@Crozin - przeczytales calego mojego posta? nie chodzi o to ze zwraca mi false. niech sobie bedzie false, jesli fraza nie zostala znaleziona. nie to jest problemem.
nospor
Cytat
@Crozin - przeczytales calego mojego posta? nie chodzi o to ze zwraca mi false. niech sobie bedzie false, jesli fraza nie zostala znaleziona. nie to jest problemem.
To chyba ty nie uważnie przeczytałeś.

No ale pokolei
1) Piszesz (czyli $index != false)
Nie wiem czy wiesz, ale 0 == false jest true, false == false jest true, ale już 0 === false jest false a false === false jest true.

2)
$newText = "to jest moj tekst z $text";
Cytat
Wypisalam sobie $text i $newText - są takie same
Guzik prawda. Jak mogą być takie same, skoro newTekst generujesz z dwóch ciągów: "to jest mój tekst z " oraz z $text? Nie, onie nie są takie same. Z racji, że $text dopisujesz dalej, to strpos nigdy z $newTekst nie da ci 0, zaś z samego tekst może dać ci 0 i jeśli robisz $index != false to możesz mieć problem. Masz robić $index !== false
misty
no i chcialam kliknac na "odpowiedz" a kliknelam na "pomogl". ehh, nie da sie tego cofnac chyba. tak, sprawdzilam rowniez z === (nie umiescilam tego w przykladzie i nie napisalam-moj blad). ale wartosc stringow jest rowna (ok, nie sa to te same obiekty - swoja droga czy w phpie to istnieje jako obiekt?).

Skoro wartosci (nie obiekty, ale wartosci) $text i $newText sa te same-dlaczego dla jednego przypadku znajduje mi strpos a dla drugiego nie? z tego co sie orientuje to strpos przeszukuje String - jego wartosc, nic innego. Wiec skoro wartosc jest ta sama-skad rozne zachowania?
nospor
Czemu nie napiszesz nam co te twoje rzeczy zawierają? Czemu mamy polegać na Twoich domysłach i sami sie domyślać czy używać == czy może ===? Pomóż nam sobie pomóc.

  1. function test($text, $strToSearch) {
  2.  
  3. $newText = "to jest moj tekst z $text";
  4. $index = strpos($newText, $strToSearch);
  5. $index2 = strpos($text, $strToSearch);
  6. echo 'wynik:';
  7. var_dump($index);
  8. echo 'wynik2:';
  9. var_dump($index2);
  10.  
  11. echo 'text:';
  12. var_dump($text);
  13. echo 'nowy tekst:';
  14. var_dump($newText);
  15. echo 'szukana:';
  16. var_dump($strToSearch);
  17. }

Co wyświetla?
Crozin
Pokaż cały kawałek kodu, na którym można zaobserwować błędne działanie skryptu.

Cytat
swoja droga czy w phpie to istnieje jako obiekt?
Nie, w PHP tekst nie jest obiektem.
misty
wiecie co, mi sie wydaje ze to moze byc wina tego jak te dane sa zapisywane w bazie. tzn: paremeterem ktory przekazuje do mojej funkcji ($text) jest
dana wyciagnieta z bazy. Teraz jak patrze, to nie wyglada ona tak:
  1. to jest moj super tekst testowy lalala 1 2 3


tylko

  1. to jest moj super tekst
  2. testowy lalala
  3. 1 2 3


zas do $newText przypisywalam "to jest moj super tekst testowy lalala 1 2 3". Mysle ze to jest problem.
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.