Kod funkcji strstr()

0

Mam takie pytanie potrzebuje kod funkcji strstr() nie pytajcie dlaczego, nigdzie nie znalazłem kodu funkcji strstr więc postanowiłem sam napisać tylko coś nie chce do końca działać

 function porownaj($tekst1,$tekst2) {

  $licznik = 0;
  $licznik1 = 0;
  $licznik2 = 0;
  $ile_ma_1 = strlen($tekst1);
  $ile_ma_2 = strlen($tekst2);
  while ($licznik <= $ile_ma_1) {
    
    if ($tekst1[$licznik] == $tekst2[0]) {
    while ($licznik1 <= $ile_ma_2) {
      if ($tekst1[$licznik] == $tekst2[$licznik1]) $licznik2++;
      //else $licznik2--;
      //print " f";
      $licznik++;
      $licznik1++;
    }
    //$wynik = $ile_ma_2 / $licznik2;
    //if ($wynik > 2) return true;
    }
    if ($licznik2 >= $ile_ma_2) return true;
    $licznik1 = 0;
    $licznik++;
    
    
  }


  return false;


}

$a = porownaj("tomek","omek");

Takie wywołanie funkcji działa.

$a = porownaj("tomek","omekk"); 

Dla takiego też zwraca wartość true, a nie powinno.

2

@miej95: jak można linkować do dokumentacji i w tym samym zdaniu szerzyć kłamstwa (że strstr zwraca boolean)?
[strstr] Returns the portion of string, or FALSE if needle is not found.

Potem z kolei piszesz zabugowaną funkcję - masz wyraźnie w dokumentacji strpos, żeby NIE stosować operatora ==, a Ty jeszcze się chwalisz, że "zacząłeś od false", jakby to miało jakieś znaczenie i było różne od po prostu !warunek...
This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

Nie chcę Cię atakować, ale prostowanie takich wypowiedzi tylko dokłada innym roboty, więc pierwsze zapoznaj się z tematem, potem odpowiadaj.

Edit: nie mówiąc już o tym, że wyraźnie widać, że intencją autora jest stworzenie takiej funkcji od podstaw, bez wykorzystywania innej funkcji bazującej na stringach, wykonujących tą samą akcję, a różniącej się tylko zwrotką.

0

@dzek69 masz rację pomieszałem, oczywiście chodziło mi o to że jego funkcja zwraca boolean, miałem to napisane w dobrej formie ale jak zacząłem zmieniać żeby było gramatycznie poprawnie to skasowałem gdzies to co nie trzeba. Mój błąd nie zgłębiłem tej funkcji na tyle zeby się wypowiadać.

1

Funkcja jest po prostu źle napisana - i to na wielu poziomach.
Musisz nad nią popracować.

  1. nie zwraca części tekstu w wypadku gdy znajdzie jeden w drugim
  2. nie wiadomo po co ma 3 liczniki, do tego o zbyt podobnej nazwie
  3. zeruje nie ten licznik co trzeba (chyba - patrz 2)
  4. ma błąd w warunku if w najgłębszym while
  5. nie sprawdza pustości łańcuchów
  6. może niepoprawnie obsługiwać sytuacje gdy jeden łańcuch jest krótszy od drugiego (chyba - patrz 2)

Popraw i przetestuj, napisz co Ci wyszło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1