Heinz: strpos

hallo,

warum findet

if( strpos($string,',') !== false ) {

in einem (durch echo kontrollierten) String "bla, bla, bla" die Kommata nicht?

VG, Heinz

  1. Findet er doch, allerdings ist !== ein typengleicher Vergleich, d.h. bei ungleichen Typen wie dem Ergebnis von strpos (Integer) und false (Boolean) wird auf jeden Fall false zurückgegeben. Prüfe statt auf false auf -1, dann klappt es.

    Gruß, LX

    --
    RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
    RFC 1925, Satz 11a: Siehe Regel 6a
    1. Ich muss mich korrigieren: strpos funktioniert in php etwas anders als indexOf in JavaScript.

      Offenbar ist der String doch nicht das, was man erwartet. Versuche es doch einmal mit var_dump statt mit echo (denn letzteres bewirkt eine String-Umwandlung, genau wie print).

      Gruß, LX

      --
      RFC 1925, Satz 6a: Es ist immer möglich, einen weiteren Umweg einzufügen.
      RFC 1925, Satz 11a: Siehe Regel 6a
    2. Findet er doch, allerdings ist !== ein typengleicher Vergleich,

      ...den man tunlichst so anwenden sollte, wenn man keine bösen Überaschungen erleben will...sagt das psp-manual ;-)

      VG, Heinz

    3. Hello LX,

      Findet er doch, allerdings ist !== ein typengleicher Vergleich, d.h. bei ungleichen Typen wie dem Ergebnis von strpos (Integer) und false (Boolean) wird auf jeden Fall false zurückgegeben. Prüfe statt auf false auf -1, dann klappt es.

      Nö LX.

      Der Identitäts-Vergleich ist bei PHP schon richtig angewandt so. Die Funktion strpos() liefert entweder ein numerisches Ergebnis (integer) für den ersten Treffer, wenn eine Position zu finden war, oder ein boolesches false, wenn kein Treffer vorhanden war.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  2. $string = 'bla, bla, bla';  
    if(strpos($string, ',') !== false)  
      echo 'comma found'  
    else  
      echo 'jackass'
    

    Funzt doch? Liegts vielleicht an deinem "}", oder ist das nur ein Copy&Paste Fehler

    1. Funzt doch? Liegts vielleicht an deinem "}", oder ist das nur ein Copy&Paste Fehler

      Du hast recht, es funzt.

      Aber im Gesamten funzt es nicht. Hier mal die ganze Funktion:

        
      function test($Variable)  
      {  
           // wenn ein Komma in der Variable ist  
           if( strpos($Variable,',') !== false )  
           {  
                $vararray = explode(",", $Variable);  
                foreach($vararray as $Einzevar)  
                {  
        
      	       //sql-Abfrage  
      	       ...  
      	       //und anschließend in Array $arrayname speichern  
      	  
                } // end foreach  
        
                print_r($arrayname); // gibt das Array genau so aus, wie erwartet, also funktioniert es bis hierhin  
        
                $arrayname = implode(", ", $arrayname);  
                return $arrayname;  
           } //end if strpos  
        
           else  
           {  
        
        
           // wenn kein komma  
           echo ("Kein Komma");  
           // tu was anderes mit der Variablen  
                return $arrayname;  
           } // end else  
      } // end function  
      
      

      Ich hätte erwartet, dass die Funktion:

      1. Bei Vorhandensein eines Kommas mir einen String mit den Arrayvariablen zurückliefert, wiederum durch ein Komma getrennt
        2)Bei Nichtvorhandesein eines Kommas den "else-Teil" abarbeitet

      Aber die Funktion arbeitet beide Teile ab, d.h. sie stopt nicht nach dem "if-Teil", wenn in der Variablen ein Komma gefunden wurde.

      VG, Heinz

      1. Ich denke mal du hast einfach nur nen paar Vars falsch gesetzt.

        Ersetze mal

        print_r($arrayname);
        mit
        print_r($vararray);

        und

        $arrayname = implode(", ", $arrayname);
        mit
        $arrayname = implode(", ", $vararray);

        Dann funktioniert dein Code Snippet auch.