Twilo: Vergleichprobleme

Hallo,

hab ich einen leichten Blackout?!

<?php  
$zahl = '25c';  
var_dump($zahl == (int)$zahl);  
?>

warum kommt da true raus?
'25c' == 25 sollte doch nicht true ergeben, oder?

mfg
Twilo

  1. warum kommt da true raus?
    '25c' == 25 sollte doch nicht true ergeben, oder?
    weil du ein carsting machst. nach (int)$zahl wird aus 25c eine 25

    mfg
    edx

    mfg
    Twilo

    1. Hallo,

      warum kommt da true raus?
      '25c' == 25 sollte doch nicht true ergeben, oder?

      weil du ein carsting machst. nach (int)$zahl wird aus 25c eine 25

      ich versteh nicht so ganz, was du mir damit sagen möchtest ;-)

      ich caste doch nur ein Teil und nicht beide

      <?php  
      $zahl  = '25c';  
        
      $zahl1 = $zahl;  
      $zahl2 = (int)$zahl;  
        
      var_dump($zahl1 == $zahl2);  
      ?>
      

      ergibt auch true, ich versteh es nicht ;-)

      mfg
      Twilo

  2. Hallo Twilo.

    hab ich einen leichten Blackout?!

    <?php

    $zahl = '25c';
    var_dump($zahl == (int)$zahl);
    ?>

    
    > warum kommt da true raus?  
    > '25c' == 25 sollte doch nicht true ergeben, oder?  
      
    Offensichtlich konvertiert PHP hier „25c“ intern automatisch [in einen Integer-Wert](http://www.php.net/manual/de/language.types.string.php#language.types.string.conversion), wonach lediglich „25“ verbleibt; der Vergleich ist also wahr. Als sonderlich sinnvoll sehe ich dies hier nicht an; greife also auf den strikten Gleichheitsoperator (===) zurück.  
      
      
    Einen schönen Freitag noch.  
      
    Gruß, Mathias  
    
    -- 
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)  
      
    debian/rules
    
    1. Hallo nochmal.

      hab ich einen leichten Blackout?!

      <?php

      $zahl = '25c';
      var_dump($zahl == (int)$zahl);
      ?>

      
      > > warum kommt da true raus?  
      > > '25c' == 25 sollte doch nicht true ergeben, oder?  
      >   
      > Offensichtlich konvertiert PHP hier „25c“ intern automatisch [in einen Integer-Wert](http://www.php.net/manual/de/language.types.string.php#language.types.string.conversion), wonach lediglich „25“ verbleibt; […]  
        
      Dies bezieht sich natürlich auf die linke Seite des Vergleiches, ohne expliziten Cast.  
        
        
      Einen schönen Freitag noch.  
        
      Gruß, Mathias  
      
      -- 
      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)  
        
      debian/rules
      
      1. Hallo,

        Offensichtlich konvertiert PHP hier „25c“ intern automatisch in einen Integer-Wert, wonach lediglich „25“ verbleibt; […]

        hm...
        wenn ich das richtig verstehe, konvrtiert er nur bei Berechnungen

        greife also auf den strikten Gleichheitsoperator (===) zurück

        ich wollte so testen, ob es sich um eine Zahl (die Eingabe kommt per Formular) handelt.
        Ich wollte nicht gleich auf preg_match zurückgreifen ;-)

        mfg
        Twilo

        1. Hallo Twilo.

          Offensichtlich konvertiert PHP hier „25c“ intern automatisch in einen Integer-Wert, wonach lediglich „25“ verbleibt; […]

          hm...
          wenn ich das richtig verstehe, konvrtiert er nur bei Berechnungen

          … und Vergleichen. Integer hat hier also eine höhere Rangordnung als String. Hier noch ein paar Experimente:

          var_dump('42a' == 42); // true  
          var_dump('aa' == 42); // false  
          var_dump('a42' == 42); // false  
          var_dump('4a2' == 42); // false  
          var_dump('4a2' == 4); // true
          

          greife also auf den strikten Gleichheitsoperator (===) zurück

          ich wollte so testen, ob es sich um eine Zahl (die Eingabe kommt per Formular) handelt.

          Dann solltest du dir is_numeric anschauen.

          Ich wollte nicht gleich auf preg_match zurückgreifen ;-)

          Keine Sorge, die Kanone muss nicht gezogen werden.

          Einen schönen Freitag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
          1. Hallo,

            Dann solltest du dir is_numeric anschauen.

            ctype_digit ist da glaube ich besser, da bei is_numeric auch 1.0 gültig ist

            mfg
            Twilo