php funnktion geht net

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von Schneemann, 09.10.2006.

  1. #1 Schneemann, 09.10.2006
    Schneemann

    Schneemann Routinier

    Dabei seit:
    27.06.2006
    Beiträge:
    289
    Zustimmungen:
    0
    Ort:
    /home/janosch
    hab hier n funktion, die mir zählen soll wie oft $needle in $haystack vorkommt. dafür gibt es substr_count. Aber ich will dass er zwischen groß-und-klein-schreibung keinen unterschied macht (deswegen str_i_pos).

    Aber irgendwie blick ich grade nicht wo der fehler ist. Irgendwie gibt stripos() immer FALSE zurück.

    PHP:
    function str_count($haystack,$needle) {
      
    $offset 0;
      
    $i 0;
      while (
    $offset stripos($haystack,$needle,$offset)) $i++;
      return 
    $i;
    }
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Schneemann, 09.10.2006
    Schneemann

    Schneemann Routinier

    Dabei seit:
    27.06.2006
    Beiträge:
    289
    Zustimmungen:
    0
    Ort:
    /home/janosch
    hab den fehler...

    ich habe die funktion mit dem aufruf:
    print str_count("foobarfoobarfoo","foo")."\r\n";
    getestet.

    Da foo als 1. an der 0. stelle gefunden wird gibt stripos() 0 zurück. und 0 wird mit FALSE verwechselt
     
  4. #3 satisfied, 09.10.2006
    satisfied

    satisfied Mitglied

    Dabei seit:
    09.09.2006
    Beiträge:
    32
    Zustimmungen:
    0
    Kannst ja in der while schleife die Bedingung so schreiben:
    PHP:
    (false !== ($offset stripos(...)))
    Wenn du zählen willst (ohne Schleife), dann mit preg_match() und im pattern /i setzen für case-insensitive. Als dritten Parameter $param und diesen zählen $cnt = count($param)-1

    Alternativ kannst du auch den $string mit strtolower() erstmal in einer temporären Variable $stringLower ablegen und dort die $needle mit substr_count() zählen ($needle auch strtolower()).

    Gruß
     
  5. #4 Schneemann, 09.10.2006
    Schneemann

    Schneemann Routinier

    Dabei seit:
    27.06.2006
    Beiträge:
    289
    Zustimmungen:
    0
    Ort:
    /home/janosch
    Hallo,

    hab gelesen dass !== nur in php4 geht. habs mit "if (stripos(...)===FALSE) break" gelöst.
    und zwar so:
    PHP:
      function str_count($haystack,$needle) {
        
    $offset 0;
        
    $i 0;
        while (
    TRUE) {
          
    $offset stripos($haystack,$needle,$offset);
          if (
    $offset===FALSE) break;
          
    $i++;
          
    $offset++;
        }
        return 
    $i;
      }
    da muss eh noch $offset++ weil der sonst immer an der gleichen stelle stripos macht.

    aber preg_match ist keine schlechte idee, aber muss ich dann nicht preg_match_all nehmen. Und dann brauch ich kein count, weil mir preg_match_all() gleich noch die anzahl ausgibt.

    Also danke für deinen tip, er vereinfacht meine funktion ;)
     
  6. #5 satisfied, 10.10.2006
    satisfied

    satisfied Mitglied

    Dabei seit:
    09.09.2006
    Beiträge:
    32
    Zustimmungen:
    0
    Glück auf Schneemann,
    Ich hab hier zuhause Php >5.1 laufen und das funtioniert wunderbar. Wird auf der php.net - Seite auch an mehreren Stellen ausdrücklich empfohlen diese negative eineindeutige Prüfung.
    ich hab es mal mit einer for-Schleife probiert:
    PHP:
    function str_count_2($haystack$needle){
        for(
    $offset=$i=0$offset<strlen($haystack) && false!==($offset=stripos($haystack$needle$offset));$offset++){
            
    $i++;
        }

        return 
    $i;
    }
    $pattern = array('foofoobarfoofoobarfoo','barbarbar','foofoofoo');
    $match 'foo';
    foreach(
    $pattern as $val){
         echo 
    $str_count_2($val$match), '<br />';
    }

    # liefert:
    # 5
    # 0
    # 3
    Stimmt. :)
     
Thema:

php funnktion geht net

Die Seite wird geladen...

php funnktion geht net - Ähnliche Themen

  1. Kabel I-net geht auf Arbeit aber nicht Zuhause

    Kabel I-net geht auf Arbeit aber nicht Zuhause: Hallo liebe Liebenden & Haters dieser Welt, ich komme bei mir zuhause nicht ins Internet via Ethernet-Kabel. Es handelt sich um einen Laptop, der...
  2. Lets Encrypt geht in den Regelbetrieb über

    Lets Encrypt geht in den Regelbetrieb über: Die Linux Foundation teilt mit, dass das unter ihrem Schirm stehende Projekt Let's Encrypt die Beta-Phase abschließt und den Regelbetrieb...
  3. Java Plug-in geht in Rente

    Java Plug-in geht in Rente: Oracle hat angekündigt, mit der Auslieferung von Java 9, das frühestens im Frühjahr 2017 erscheinen soll, das Java-Browser-Plug-in als veraltet zu...
  4. Let's Encrypt geht in die offene Betaphase über

    Let's Encrypt geht in die offene Betaphase über: Let's Encrypt stellt kostenlos, schnell und unkompliziert SSL-Zertifikate aus. Das Projekt hatte am 12. September einen geschlossenen Betatest...
  5. Thomas-Krenn-Award geht in neue Runde

    Thomas-Krenn-Award geht in neue Runde: Bereits zum sechsten Mal unterstützt der Serverhersteller anlässlich der Thomas-Krenn Open Source Förderung Projekte mit Hardware-Gutscheinen im...