Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrdimensionales Array eindimensional umstellen

Einklappen

Neue Werbung 2019

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

  • Mehrdimensionales Array eindimensional umstellen

    Wie im Titel beschrieben, brauche ich Hilfe bei meinem mehrdimensionalen Array, ich möchte dieses Eindimensional darstellen, bzw. umstellen, damit ich dieses in eine sql datenbank speichern kann.

    Hier mein bisheriger Code:

    PHP-Code:
    <?
        require_once("config/connect.inc.php");
    ?>
    <html>
    <head>
    </head>
    <body>
    Hallo <b>hier</b> kommt mysql test
    <br><br>
    <?

    if (file_exists('bewertungen.xml')) 
        {
            $array = simplexml_load_file('bewertungen.xml');
            
            echo "Wert ist ".$array->Stammdaten->Record[0]->bewertungen->Record->Familienfreundlichkeit;
            echo "<br>";
            echo "<br>";
            echo "Gebiet ist ".$array->Stammdaten->Record[1]->Gebiet;
            
            echo "<pre>";
            print_r($array);
            echo "</pre>";
            
            echo "<br>";
            echo "<br>";
            
            
            //echo $array->ANGEBOT[0]->PREISTERMIN; -> verändert die Diemension in der das Array beginnt, springt genau in Angebot [0]
            
                foreach ($array as $value) 
                {
                echo "Der aktuelle Wert ist: " . $value . "<br>";
                    echo "<pre>";
                    print_r($value);
                    echo "</pre>";
                exit ();
                }
            
        
            //<pre> is nur für querys, variablen direkt per echo
            /*
            echo "<pre>";
            print_r($array);
            echo "</pre>";
            */
        } 
        else 
        {
            exit('Konnte beispiel.xml nicht öffnen.');
        }

    //Auswahl der Zeilen aus der Tabelle
    $query = "SELECT * FROM restaurant";

    mysql_query("INSERT INTO restaurant (`id`, `name`, `regioncode`, `sterne`, `ort`, `gebiet`, `land`) 
    VALUES ('777', '', '', '', '', '', '');");


    //Anfrage an MySQL senden
    $result = mysql_query($query) or die("Anfrage nicht erfolgreich");

    //Anzahl der Datensätze ausgeben
    $anzahl = mysql_num_rows($result);
    echo "Anzahl der Datensätze: $anzahl";
    echo "<br>";

    ?>

    </body>
    </html>

  • #2
    Also ich weiß, daß man einen mehrdimensionalen Array mittels RecursiveArrayIterator bzw. RecursiveIteratorIterator in einen eindimensionalen Array umwandeln kann, aber du hast da kein Array, sondern ein Objekt (das sich wie ein Array verhält)

    Kommentar


    • #3
      Ich gehe mal davon aus du willst nicht das array in die DB schreiben sondern die werte die dieses array beinhaltet. Falls du doch das array speichern willst ist serialize() dein freund.

      Ausserdem sehe ich deinem Code kein Array und $array kein array sondern ein SimpleXMLElement. Wie ist das besagte array überhaupt aufgebaut?

      Kommentar


      • #4
        Hallo danke erstmal für die Antworten,

        vorab, ja man merkt wahrscheinlich an meiner Ausdrucksweise, dass ich PHP Einsteiger bin, sorry für meine falsche Ausdrucksweise.

        Wie Squall sagt, möchte ich die Werte von mehreren Bewertungen für Restaurants aus einer XML in eine Datenbank speichern, es hat 4 Dimensionen. Ich gebe noch einen Auszug über den Aufbau:

        PHP-Code:
        SimpleXMLElement Object
        (
            [@
        attributes] => Array
                (
                    [
        comment] => generated by Test AG
                    
        [creationTime] => 2010-04-16 21:00
                
        )

            [
        Stammdaten] => SimpleXMLElement Object
                
        (
                    [
        Record] => Array
                        (
                            [
        0] => SimpleXMLElement Object
                                
        (
                                    [
        Anrede] => SimpleXMLElement Object
                                        
        (
                                            [@
        attributes] => Array
                                                (
                                                    [
        Kunde_Korrektur] => 
                                                )

                                        )

                                    [
        Titel] => SimpleXMLElement Object
                                        
        (
                                            [@
        attributes] => Array
                                                (
                                                    [
        Kunde_Korrektur] => 
                                                )

                                        )

                                    [
        Vorname] => SimpleXMLElement Object
                                        
        (
                                            [@
        attributes] => Array
                                                (
                                                    [
        Kunde_Korrektur] => 
                                                )

                                        )

                                    [
        Name] => SimpleXMLElement Object
                                        
        (
                                            [@
        attributes] => Array
                                                (
                                                    [
        Kunde_Korrektur] => 
                                                )

                                        )

                                    [
        Alter] => SimpleXMLElement Object
                                        
        (
                                        )

                                    [
        Email] => SimpleXMLElement Object
                                        
        (
                                        )

                                    [
        Restaurantkette] => MCD
                                    
        [BestellID] => MCD_28821
                                    
        [Leistungscode] => SimpleXMLElement Object
                                        
        (
                                        )

                                    [
        Bewertungszeitpunkt] => 1271399418
                                    
        [Besuchsmonat] => 1269900000
                                    
        [Besucht_als] => paar
                                    
        [mit_Kinder] => 0
                                    
        [Alter_Kinder] => -1;-1;-1
                                    
        [Restaurantname] => McDonalds
                                    
        [ID] => 679
                                    
        [TopRegionsID] => 288
                                    
        [Sterne] => 4.5
                                    
        [Ort] => 187
                                    
        [Ort] => Frankfurt am Main
                                    
        [Gebiet] => Hessen
                                    
        [Land] => Deutschland
                                    
        [Agent] => SimpleXMLElement Object
                                        
        (
                                        )

                                    [
        Hauptbewertungen] => SimpleXMLElement Object
                                        
        (
                                            [
        Record] => SimpleXMLElement Object
                                                
        (
                                                    [
        Restaurant] => 4
                                                    
        [Moebeliar] => 4
                                                    
        [Service] => 4
                                                    
        [Lage] => 4
                                                    
        [Essen] => 4
                                                    
        [Familienfreundlichkeit] => 5
                                                    
        [Fazit] => SimpleXMLElement Object
                                                        
        (
                                                        )

                                                    [
        Weiterempfehlung] => 0
                                                    
        [Titel] => Enttäuschung
                                                    
        [InfoVeranstalter] => 0
                                                    
        [Tipps] => SimpleXMLElement Object
                                                        
        (
                                                        )

                                                    [
        Sterne] => 3
                                                
        )

                                        ) 

        Kommentar


        • #5
          Hm, als Anfänger wird das ein wenig schwierig, denn alles was mir einfällt, arbeitet mit Objekten (da deine Ausgangsvariable ja auch ein Objekt ist).

          Man könnte es noch versuchen die XML-Datei über XSLT/WDDX in ein gewünschtes Zielarray umzuwandeln, mit dem man dann die DB füttert …

          letzten Endes hängt ganz viel davon ab, wie der Array eigentlich aussehen soll.

          Kommentar


          • #6
            Ich gehe mal davon aus dass du unter record mehrere Einträge hast (record[0], record[1] etc.). Dann kannst du folgendes mal versuchen:

            PHP-Code:
            foreach($array->Stammdaten->Record as $record) {
                    echo 
            "<pre>";
                    
            print_r($record);
                    echo 
            "</pre>";

            Wenn das funktioniert muss du noch noch in der foreach ein array erstellen und dir die werte die du brauchst in das array packen. Un danach deinen query ausführen.

            Kommentar


            • #7
              Also serh schln Squall, dass hat schonmal funktioniert.

              Er gibt mir nun folgendes aus:

              PHP-Code:
              SimpleXMLElement Object
              (
                  [
              Anrede] => SimpleXMLElement Object
                      
              (
                          [@
              attributes] => Array
                              (
                                  [
              Kunde_Korrektur] => 
                              )
              .... 
              usw
              also jetzt soll ich dann ein array erstellen?

              wären dann die values die ich übergebe z.b. bwei 3 records (ANREDE[0],TITEL[0],usw.) ???

              Kommentar


              • #8
                Nei, du musst auf $record zugreifen, ich sehe zwar keine inhalte aber gehe mal davon aus das du die gelöscht hast und sie normalerweise in Kunde korrektur stehen würden.

                Für anrede würde sich dann folgendes ergeben:

                PHP-Code:
                echo $record->Anrede->@attributes['Kunde_Korrektur']; 
                Überall wo Object steht kannst du mit -> zugreifen und wo array steht mit []

                Kommentar


                • #9
                  okay, also z.b. bei anrede ist der beispiel inhalt

                  PHP-Code:
                  <Record>
                  <
                  Anrede Kunde_korrektur="Frau">Frau</Anrede>
                  <
                  Vorname Kunde_korrektur="Andrea">Andrea</Vorname>
                  <
                  Alter>46-50</Alter>
                  <
                  Email>blub@t-online.de</Email>

                  usw bis...

                  <
                  Hauptbewertungen>
                  <
                  Record>
                  <
                  Restaurant>5</Restaurant>
                  ...
                  <
                  Fazit>lorem ipsum</Fazit
                  Wie kann ich dann nun, die werte beio values in die DB schreiben?

                  Kommentar


                  • #10
                    Meines Erachtens besteht keine Notwendigkeit da erst ein Array zu erstellen ....
                    Du kannst Doch einfach durch Deine "Records" durchloopen und egal wie tief sie verschatelt sind immer direkt auf die Element zugreifen und damit Dein Query direkt erstellen.

                    inhalt von record.xml:
                    Code:
                    <?xml version="1.0" encoding="UTF-8"?>
                    <data>
                    	<Record>
                    		<Anrede Kunde_korrektur="Frau">Frau</Anrede>
                    		<Vorname Kunde_korrektur="Andrea">Andrea</Vorname>
                    		<Alter>46-50</Alter>
                    		<Email>blub@example.net</Email>
                    		<nested>
                    			<blub>bla</blub>
                    		</nested>
                    	</Record>
                    	
                    	<Record>
                    		<Anrede Kunde_korrektur="Frau">Herr</Anrede>
                    		<Vorname Kunde_korrektur="Andrea">Andreas</Vorname>
                    		<Alter>46-50</Alter>
                    		<Email>blub@example.com</Email>
                    		<nested>
                    			<blub>bla</blub>
                    		</nested>
                    	</Record>
                    </data>
                    PHP-Code:
                    $document =  new SimpleXmlIterator('./record.xml'nulltrue);
                    $data $document[0]->Record;
                    for( 
                    $data->rewind(); $data->valid(); $data->next()){
                        
                        
                    //print_r($data->current()->Vorname);
                        //print_r($data->current()->nested->blub);
                        
                    echo '<pre>';
                        
                    $query 'INSERT INTO  table ( vorname, blub ) VALUES ( '.$data->current()->Vorname .','.$data->current()->nested->blub .')';
                        
                    print_r($query);
                        echo 
                    '</pre>';

                    AFFE ist nur im Dezimalsystem ein Palindrom.

                    Kommentar


                    • #11
                      bzw.
                      PHP-Code:
                      $document =  new SimpleXmlIterator('./record.xml'nulltrue);
                      $data $document[0]->Record;
                      foreach (
                      $data as $item)
                      {    
                          
                      //print_r($item->Vorname);
                          //print_r($item->nested->blub);
                          
                      echo '<pre>';
                          
                      $query 'INSERT INTO  table ( vorname, blub ) VALUES ( '.$item->Vorname .','.$item->nested->blub .')';
                          
                      print_r($query);
                          echo 
                      '</pre>';

                      Kommentar


                      • #12
                        @agundur, wie kann ich denn dann, da mein XML jede Bewertung in wie unten gegliedert gliedert. Also ich evrsteh es nicht ganz, ich dachte mir, ich mache mehr als eine Tabelle, wie viele weiss ich auch nicht genau. In die ich dann die Inhalte speicher.

                        Also wisst ihr was ich meine, ich habe ja mehrere Records, aber mit anderen Inhalten * Werten. Wieviel Tabellen, würde sich denn empfehlen?

                        PHP-Code:
                        - <Record>
                          <
                        Anrede Kunde_Korrektur="Herr">Herr</Anrede
                          <
                        Titel>Herr</Titel
                          <
                        Vorname Kunde_Korrektur="dieter h.">dieter</Vorname
                          <
                        Name>heinemann</Name
                          <
                        Alter>51-55</Alter
                          <
                        Email>blub@web.de</Email
                          <
                        Restaurant Kunde_Korrektur="Mc Donalds" Veranstalter_lang="Mc Donalds">MCD</Restaurant
                          <
                        ID>019</ID
                          <
                        Verreist_als>paar</Verreist_als
                          <
                        mitreisende_Kinder>0</mitreisende_Kinder>  
                          <
                        Alter_Kinder>-1;-1;-1</Alter_Kinder
                          <
                        Sterne>4</Sterne
                          <
                        Ort>Frankfurt am Main</Ort
                          <
                        Gebiet>Hessen</Gebiet
                          <
                        Land>Deutschland</Land
                        - <
                        Hauptbewertungen>
                        - <
                        Record>
                          <
                        Restaurant>5</Restaurant
                          <
                        Mobilar>5</Mobilar
                          <
                        Service>5</Service
                          <
                        Lage>2</Lage
                          <
                        Essen>2</Essen
                          <
                        Familienfreundlichkeit>5</Familienfreundlichkeit
                          <
                        Fazit>mit dem essen eine glatte 5 personal immer hielfsbereit . </Fazit
                          <
                        Weiterempfehlung>1</Weiterempfehlung
                          <
                        Titel>es geht so</Titel
                          <
                        InfoRestaurant>0</InfoRestaurant
                          <
                        Sterne>0</Sterne
                          </
                        Record>
                          </
                        Hauptbewertungen>
                        - <
                        Weitere_Bewertungen>
                        + <
                        Record>
                          <
                        wie_gewohnt>eher ja</wie_gewohnt>  
                          <
                        Preis_Leistungsverhaeltnis>eher ja</Preis_Leistungsverhaeltnis
                          </
                        Record>
                          </
                        Weitere_Bewertungen>
                        - <
                        Essen>
                        + <
                        Record>
                          <
                        Sauberkeit>4</Sauberkeit
                          <
                        Speisen>1</Speisen
                          <
                        Getraenke>4</Getraenke
                          </
                        Record>
                          </
                        Essen>
                        - <
                        Familienfreundlichkeit>
                        + <
                        Record>
                          <
                        kindgerechte_Speisen>5</kindgerechte_Speisen
                          <
                        Spielplatz>5</Spielplatz
                          </
                        Record>
                          </
                        Familienfreundlichkeit>
                        - <
                        Restaurant>
                        + <
                        Record>
                          <
                        Sauberkeit>5</Sauberkeit
                          <
                        Familientauglichkeit>5</Familientauglichkeit
                          <
                        Erholungswert>5</Erholungswert
                          </
                        Record>
                          </
                        Restaurant>
                        - <
                        Service>
                        + <
                        Record>
                          <
                        Personal>5</Personal
                          <
                        Deutschsprachigkeit>4</Deutschsprachigkeit
                          </
                        Record>
                          </
                        Service>
                        - <
                        Record>
                          <
                        Anrede Kunde_Korrektur="Frau">Frau</Anrede
                          <
                        Titel>Frau</Titel
                          <
                        Vorname Kunde_Korrektur="Sandy">Sarah</Vorname
                          ....
                          .... 

                        Kommentar


                        • #13
                          wie kann ich denn dann, da mein XML jede Bewertung in wie unten gegliedert gliedert.
                          wärst Du so nett und versuchst das nochmal anders zu formulieren ?
                          Wenn das eine Frage ist hab ich Schwierigkeiten diese zu verstehen.
                          AFFE ist nur im Dezimalsystem ein Palindrom.

                          Kommentar


                          • #14
                            hehe okay, sorry... das kommt davon wenn man immer so schnellalles runter tippt. Also im letzten Post, hab ich ja gezeigt, wie mein XML aufgebaut ist. Wie kann ich denn nun, jede einzelne Bewertung (beginnt ja immer bei <Anrede>) einlesen, dass muss ich doch mit einer schleife machen oder? Aber woher erkenne ich bzw. mache ich erkenntlich dass das Schleifenende das ende der xml ist. Weil ja die Records im XML mit [x] (x=wert, anfang 0) nummeriert sind. In den einzelnen Bewertungen, von Tagen, ist es wie kopiert im vorherigen Post, es sidn einfach mehrere Records untereinander... Also da mach ich dann auch Record[0]=Bewertung 1, Record[1]=Bewertung 2. Aber wie kann ich sagen, adass er bis zum ende durchlesen soll, also z.b. wenn ich 100 bewertungen hab, will ich nicht unbedingt 100x Record[x] schreiben.
                            lg

                            Kommentar


                            • #15
                              Also, wenn ich das richtig verstanden habe, geht es darum das Du in einem "Haupt-Record" - die mit den Stammdaten - eine unbekannte Anzahl von "Unter-Records" - die Bewertungen - hast und diese auch verarbeitet werden müssen.

                              Es spricht nichts dagegen innerhalb der While - Schleife, wenn Du auf Deine "Unter-Records" stößt, eine foreach - Schleife aufzumachen und dies abzuarbeiten.
                              AFFE ist nur im Dezimalsystem ein Palindrom.

                              Kommentar

                              Lädt...
                              X