Sind die Strings "007031106" und "7031106" identisch???

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sind die Strings "007031106" und "7031106" identisch???

    Hallo erstmal,

    Ich habe eine Datei(XML, CVS oder Textdatei, ist für meine Frage irrelevant) mit allen Produkten eines Unternehmens, die ich alle in eine MySQL-Datenbank einfügen möchte. Dabei erstelle ich ein Array aus allen Produktnummern. Ich gehe die Datei von unten nach oben durch und prüfe mit der Funktion in_array ob die Produktnummer schon im Array $ProduktArray existiert. Falls diese noch nicht im Array vorhanden ist, füge ich sie ein, falls sie aber vorhanden ist, springe ich in der Datei zur nächsten Produktnummer. Bis dahin sollte eigentlich alles klar sein. Nun zu meinem Problem.

    Es gibt ein Produkt mit der Nummer 007031106 und ein anderes mit der Nummer 7031106. Also einfach zwei Nullen am Anfang weniger. Zuerst wird die erste Nummer in das Array geschrieben, und einige Produknummer weiter ist die zweite Nummer dran. Wie schon oben beschrieben wende ich dabei die Funktion in_array an. Das sieht in diesem Fall dann so aus:
    PHP-Code:
    if (in_array(7031106$Produktarray)) {
         
    $Produktarray[] = 7031106;

    Obwohl diese Produktnummer nicht vorhanden sein sollte, und eigentlich reingeschrieben werden muß, passiert dies nicht. PHP schneidet beim Durchsuchen des Arrays anscheinend die zwei Nullen der ersten Produktnummer ab, sodaß die Nummern dann identisch aussehen. Somit wird die zweite Produktnummer gar nicht reingeschrieben, und ich hab ein Produkt weniger, was natürlich verheerend ist.

    Obwohl die Nummer samt den zwei Nullen im Array gespeichert wird(kann man durch print_r($ProduktArray) überprüfen), sind für PHP beim Durchsuchen des Arrays beide Nummer identisch, sogar wenn ich die Nummern vor dem Füllen des Arrays in Strings umwandele, werden die zwei Nullen beim Vergleich abgeschnitten.

    Ich bin für jede Hilfe dankbar. Doch bitte macht mir keine alternativen Lösungsvorschläge, die kenne ich selber auch, jedoch möchte ich einfach aus Prinzip und der Freude an der Lehre versuchen, das Problem auf diese Weise zu lösen.


    Viele Grüße und danke im voraus
    Nube2021

  • #2
    kann evtl daran liegen, dass du die produkt-id's als integer zahlen speicherst bzw verarbeitest. da es bei diesen zahlen keinen sinn hat, mehr als eine null zu speichern, werden die verworfen.

    bei strings sollte das nicht passieren.

    generell sind für systematisch zusammengesetzte id's, wie vielleicht auch in diesem fall, lohnen sich an manchen stellen die funktionen sscanf und sprintf.

    Kommentar


    • #3
      Nein, daran liegt es sicher nicht. Wie ich schon sagte, wandele ich die Produktnummern vor dem Einfügen in das Array in ein String um. Auch dann sieht er die Strings 007031106 und 7031106 als identisch an.

      Da es anscheinend doch Verständnisprobleme zu geben scheint, füge ich hier ein bißchen Code ein, den ihr einfach in eine leere Seite kopieren müßt und bei Euch ausprobieren könnt. Dann kann man die Problematik selber nachvollziehen.

      PHP-Code:
      //Produktnummer wird aus Datei eingelesen
      $testzahl "007031106";

      //dann in String umwandeln, obwohl das eigentlich nicht nötig ist. Einfach sicherheitshalber
      $testzahl = (string) $testzahl;

      //dann den String in das Array schreiben
      $TestArray = array($testzahl);

      //schließlich testen wir ob der String "7031106" schon im Array existiert,
      //was ja eigentlich nicht der Fall ist, da das Array ja nur aus einem Elemen besteht, 
      //und zwar dem obigen String "007031106"
      if (in_array("7031106"$TestArray)) {

          echo 
      "String existiert bereits";
      }
      else {
          
          echo 
      "String ist noch nicht im Array;

      Also wenn die Zahlen als int im Array gespeichert wären, dann könnte ich es verstehen. Aber wie ihr oben seht, werden diese explizit als Strings darin abgelegt. Sehr komisch. Die Strings "7031106" und "007031106" sind doch nicht identisch, oder bin ich auf einem Auge blöd????? Verdammt nochmal...

      Kommentar


      • #4
        bool in_array ( mixed needle, array haystack [, bool strict])

        Ist der dritte Parameter strict auf TRUE gesetzt, prüft in_array() auch die Typen von needle in haystack. (Quelle: hier)

        Könntest du ja mal lesen, da steht auch was über Strings in arrays...
        .
        .http://www.Nightkillerz.de
        .

        Kommentar


        • #5
          Vielen Dank

          Kommentar

          Lädt...
          X