Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem bei Daten auslesen mit foreach

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Problem bei Daten auslesen mit foreach

    Hi,

    ich habe folgende XML-Zeilen die ich aus einer Datei auslesen möchte:

    Code:
     <skill key="skinning" max="450" name="Kürschnerei" value="450"/>
    <skill key="leatherworking" max="450" name="Lederverarbeitung" value="450"/>
    wie ihr seht heißen beide Zeilen absolut gleich, ich habe nun versucht es so auszulesen:

    PHP-Code:
    foreach ($xml->characterInfo->characterTab->professions->skill as $ar4) {
    $b7[0] = $ar4['name'];
    $b8[0] = $ar4['value'];
    $b9[0] = $ar4['max'];
    $b7[1] = $ar4['name'];
    $b8[1] = $ar4['value'];
    $b9[1] = $ar4['max'];

    Hab es auch mit einem _ vor dem [] probiert usw. aber ich bekomme die zweiten Daten nicht ausgelesen, die ersten mit diesem Code aber schon.
    Wie komm ich an die zweiten Daten ran?

    Danke schonmal, DjDope

  • #2
    Funktioniert bei mir mit genau Deiner foreach-Schleife
    PHP-Code:
    <?php
    $xml 
    simplexml_load_string('<xml>
      <characterInfo>
        <characterTab>
          <professions>
            <skill key="skinning" max="450" name="Kürschnerei" value="450"/>
            <skill key="leatherworking" max="450" name="Lederverarbeitung" value="450"/>
          </professions>
        </characterTab>
      </characterInfo>
    </xml>'
    );

    foreach (
    $xml->characterInfo->characterTab->professions->skill as $ar4) { 
      echo 
    $ar4['name'], ' '$ar4['value'], "\n";
    }
    WoW Amory?

    Kommentar


    • #3
      Zitat von David Beitrag anzeigen
      Funktioniert bei mir mit genau Deiner foreach-Schleife
      PHP-Code:
      <?php
      $xml 
      simplexml_load_string('<xml>
        <characterInfo>
          <characterTab>
            <professions>
              <skill key="skinning" max="450" name="Kürschnerei" value="450"/>
              <skill key="leatherworking" max="450" name="Lederverarbeitung" value="450"/>
            </professions>
          </characterTab>
        </characterInfo>
      </xml>'
      );

      foreach (
      $xml->characterInfo->characterTab->professions->skill as $ar4) { 
        echo 
      $ar4['name'], ' '$ar4['value'], "\n";
      }
      WoW Amory?
      Ja, ist die WoW Amory.
      Wenn ich es ausgebe klappt es so auch, ich will die Werte aber nicht ausgeben sondern einer Variable zuweisen und in meiner DB speichern damit ich nur einmal am Tag den WoW-Server wegen meiner Daten bemühen muss.

      Und dem
      PHP-Code:
      $ar4['name'
      kann ich ja kein [] mehr anfügen (zumindest kam bei mir nichts bei raus außer Fehlermeldungen.

      Kommentar


      • #4
        Zitat von DjDope Beitrag anzeigen
        Ja, ist die WoW Amory.
        Wenn ich es ausgebe klappt es so auch, ich will die Werte aber nicht ausgeben sondern einer Variable zuweisen und in meiner DB speichern damit ich nur einmal am Tag den WoW-Server wegen meiner Daten bemühen muss.

        Und dem
        PHP-Code:
        $ar4['name'
        kann ich ja kein [] mehr anfügen (zumindest kam bei mir nichts bei raus außer Fehlermeldungen.
        Dein Code macht keinen wirklichen Sinn. Du schreibst immer wieder in die gleichen Variablen, z.b.
        $b7[0] = $ar4['name'];
        Das heißt du schreibst bei jedem Schleifendurchlauf in $b7[0] - das heißt auch, das nur der letzte Schleifendurchlauf im Endeffekt in deinen Variablen verbleiben wird.

        Warum du nun den ERSTEN Datensatz behälst versteh ich nicht ganz, kann mir höchstens vorstellen das xml-dateien aus irgendeinem grund umgekehrt geparst werden oder so ein quatsch. weiß nicht, auf jeden fall versuch mal sowas wie
        $b7[] = $ar4['name'];
        und gibt nach der schleife mal
        print_r($b7);
        aus ... da sollte dann alles drinnenstehn.

        mfg

        Kommentar


        • #5
          Zitat von DjDope Beitrag anzeigen
          Wenn ich es ausgebe klappt es so auch, ich will die Werte aber nicht ausgeben sondern einer Variable zuweisen und in meiner DB speichern damit ich nur einmal am Tag den WoW-Server wegen meiner Daten bemühen muss.
          Weshalb machst du das ganze nicht gleich wie die Ausgabe und statt es dort auszugeben schreibst du's direkt in die mysql-db?


          PHP-Code:
          <?php
          $xml 
          simplexml_load_string('<xml>
            <characterInfo>
              <characterTab>
                <professions>
                  <skill key="skinning" max="450" name="Kürschnerei" value="450"/>
                  <skill key="leatherworking" max="450" name="Lederverarbeitung" value="450"/>
                </professions>
              </characterTab>
            </characterInfo>
          </xml>'
          );

          foreach (
          $xml->characterInfo->characterTab->professions->skill as $ar4) { 
            
          $query "Insert into blablablablabla ... '".$ar4['name']."', ......";
            
          $db->sql($query);
          }

          die eingabe ist nur ein beispiel und musst du selbstverständlich anpassen.


          UPDATE: mehrdimensionale Arrays
          Ausserdem gibts in PHP auch noch mehrdimensionale Arrays, damit du die anderen nicht überschreiben musst.

          Kommentar


          • #6
            Zitat von BlackWolf Beitrag anzeigen
            weiß nicht, auf jeden fall versuch mal sowas wie
            $b7[] = $ar4['name'];
            und gibt nach der schleife mal
            print_r($b7);
            aus ... da sollte dann alles drinnenstehn.

            Danke das hat mein Problem gelöst:
            PHP-Code:
            foreach ($xml->characterInfo->characterTab->professions->skill as $ar4) {
            $b7[] = $ar4['name'];
            $b8[] = $ar4['value'];
            $b9[] = $ar4['max'];

            $b7[0], $b7[1] etc. enthalten so die werte die ich in die DB speichern kann.


            @webproger: das wären zu viele DB-Zugriffe bei ~30 Werten die abgefagt und in die db geschrieben werden sollen.

            Kommentar


            • #7
              Zitat von DjDope Beitrag anzeigen
              @webproger: das wären zu viele DB-Zugriffe bei ~30 Werten die abgefagt und in die db geschrieben werden sollen.
              Wenn da statt 30 dreihunderttausend stehen würde ...vielleicht
              Aber wenn Dir das Sorgen macht, solltest Du Dir vielleicht prepared statements ansehen.

              Kommentar


              • #8
                genau so ist das.

                Kommentar

                Lädt...
                X