Nooooooooooooooos: Vergleich zweier Strings

Hi miteinander...

Ich möchte gerne zwei Strings vergleichen. if("0000000000"=="0") muss false ergeben, da dies eindeutig zwei unterschiedliche Strings sind. Doch php meint es sei true. Was muss ich anders machen, damit php die Strings richtig behandelt?

Gruss
Noooooooooooooos

  1. Hi!

    Ich möchte gerne zwei Strings vergleichen. if("0000000000"=="0") muss false ergeben, da dies eindeutig zwei unterschiedliche Strings sind. Doch php meint es sei true. Was muss ich anders machen, damit php die Strings richtig behandelt?

    Einen typbeachtenden Vergleich verwenden - und die dafür vorgesehenen Operatoren.

    Lo!

  2. @@Nooooooooooooooos:

    nuqneH

    Was muss ich anders machen, damit php die Strings richtig behandelt?

    Den '==='-Operator verwenden.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
  3. Vielleicht eine dafür geeignete Funktion verwenden: strcmp ???

    Zum Thema Operatoren unter PHP vielleicht noch das hier:
    http://php.net/manual/en/language.operators.comparison.php

  4. Ich möchte gerne zwei Strings vergleichen. if("0000000000"=="0") muss false ergeben, da dies eindeutig zwei unterschiedliche Strings sind. Doch php meint es sei true. Was muss ich anders machen, damit php die Strings richtig behandelt?

    Ich denke das PHP sich trotz Anführungszeichen nich sicher ist, welcher Datentype gemeint ist.

    bei eine Zuweisung kann man expliziet den Datentyp mitgeben damit
    PHP weiss welcher Datentype gemeint ist.

    $int_wert  = (integer) 123;
    $real_wert = (float) 123;
    $str_wert  = (string) 123;

    Hab es nicht getestert - aber in der if abfrage muesste die Festlegung
    des Datentyps syntaktisch auch erlaubt sein. Wenn nicht, dann arbeite
    halt mir Variablen.

    1. Hi!

      if("0000000000"=="0") muss false ergeben, da dies eindeutig zwei unterschiedliche Strings sind. Doch php meint es sei true.
      Ich denke das PHP sich trotz Anführungszeichen nich sicher ist, welcher Datentype gemeint ist.

      PHP ist kein Mensch. Es arbeitet nach festen Regeln. Und eine davon ist, dass alles, was nach Zahl aussieht, in bestimmten Kontexten wie eine Zahl behandelt wird, egal welcher Variablentyp das konkret ist.

      bei eine Zuweisung kann man expliziet den Datentyp mitgeben damit PHP weiss welcher Datentype gemeint ist.

      $int_wert  = (integer) 123;
      $real_wert = (float) 123;
      $str_wert  = (string) 123;

      Das ist keine Datentypangabe sondern ein Typecast. Der nützt dir aber im weiteren Verlauf gar nichts, weil PHP nicht unterscheidet, wie eine Variable zu ihren konkreten Typ gekommen ist. Ob du nun "123" oder (string)123 schreibst kommt auf das selbe raus. Wann PHP seinen automatischen Typecasts vornimmt ist vom Kontext abhängig und nicht von der Art, wie eine Variable zu ihrem Typ gekommen ist.

      Hab es nicht getestert - aber in der if abfrage muesste die Festlegung des Datentyps syntaktisch auch erlaubt sein.

      Ja, bringt aber null Punkte, weil anschließend trotzdem der automatische Typecast zuschlägt.

      var_dump((string)"000" == (string)"0"); // true
        var_dump("000" == "0"); // true

      Man braucht für den gegebenen Fall immer den typsicheren Vergleich

      var_dump("000" === "0"); // false

      oder strcmp().

      Lo!

      1. Ja, bringt aber null Punkte, weil anschließend trotzdem der automatische Typecast zuschlägt.

        Oh - ich Looserin, dabei wollte ich mir nur die Zeit vertreiben während andere an der Antwort meiner Frage arbeiten :-)

        Hoffenlich haben (fast alle) wenigstens ein bischen über das unmenschliche Verhalten von PHP gelernt - über dieses automatischen Zuschalgen mit Typecast (im ernst - ich wusste nicht das PHP expliziete Zuweisungen "nach festen Regeln" ignoriert).

        Gruss, Bettie

        1. Hi!

          Oh - ich Looserin,

          ... und auch noch falsch geschrieben.

          Hoffenlich haben (fast alle) wenigstens ein bischen über das unmenschliche Verhalten von PHP gelernt - über dieses automatischen Zuschalgen mit Typecast (im ernst - ich wusste nicht das PHP expliziete Zuweisungen "nach festen Regeln" ignoriert).

          Die Zuweisung als solche ignoriert es auch nicht. Aber für weitere Operationen interessiert eben die Art einer irgendwann mal erfolgten Zuweisung nicht mehr. Es werden dann nur die aktuellen Werte und Typen beachtet - und gemäß der Auto-Typecast-Regeln behandelt.

          Lo!

          1. (Hi) dedlfix,

            Oh - ich Looserin,

            ... und auch noch falsch geschrieben.

            Wieso? Sie scheint doch locker drauf zu sein und
            auch "lockere" Vergleichsoperatoren zu bevorzugen ... ;-)

            MffG
            EisFuX

            1. @@EisFuX:

              nuqneH

              Oh - ich Looserin,

              ... und auch noch falsch geschrieben.

              Wieso? Sie scheint doch locker drauf zu sein und
              auch "lockere" Vergleichsoperatoren zu bevorzugen ... ;-)

              Vielleicht stammt sie auch aus Loose?

              Qapla'

              --
              Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
              (Mark Twain)
        2. Moin!

          Ja, bringt aber null Punkte, weil anschließend trotzdem der automatische Typecast zuschlägt.

          Oh - ich Looserin, dabei wollte ich mir nur die Zeit vertreiben während andere an der Antwort meiner Frage arbeiten :-)

          Ich würde eher sagen, dass du gewonnen hast. Schließlich weißt du durch deine Antwort jetzt mehr, als vorher.

          - Sven Rautenberg