foreach Problem

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

  • foreach Problem

    Warum funzt folgendes Beispielskript:

    PHP-Code:
    <?php
    require("xml.class.php");
    $xml = new XmlWriter();

    $array = array(
        array(
    'monkey''banana''Jim'),
        array(
    'hamster''apples''Kola'),
        array(
    'turtle''beans''Berty'),
    );

    $xml->push('zoo');

    foreach (
    $array as $animal) {
        
    $xml->push('animal', array('species' => $animal[0]));
        
    $xml->element('name'$animal[2]);
        
    $xml->element('food'$animal[1]);
        
    $xml->pop();
    }

    $xml->pop();
    echo 
    $xml->getXml();
    ?>
    Aber nicht mein eigenes:

    PHP-Code:
    <?php
    $arr 
    = array();

    while (
    $row mysql_fetch_array($result)) {
        
    $inner = array(
                            
    'artikelnummer' => $row['test'],  
                            
    'artikelmehrfachauswahl' => $row['test'],  
                        
    'verpackungseinheit' => $row['test'],  
                    
    'artikelnummerziel' => $row['test']
                                                                            );
                                                                            
    array_push($arr$inner);

    /*
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
    */                                                                
    $xml->push('artikel', array('transaction' => 'reinit'));

    // Tags
    foreach($inner as $a) {
        
    $xml->push('artiksatz');
        
    $xml->element('artikelnummer'$a[0]);
        
    $xml->push('artikelstamm'$a[++$i]);
        
    $xml->element('artikelmehrfachauswahl'$a[++$i]);
        
    $xml->element('verpackungseinheit'$a[++$i]);
    }
    ?>

    Folgende Fehlermeldung erscheint:

    Invalid argument supplied for foreach()


    Kann es sein dass ich ein assoziatives Array nicht mit einem integer index ansprechen kann, also $a[++$i] ??


    Danke
    Zuletzt geändert von compuboy1010; 15.04.2004, 10:13.

  • #2
    mir scheint, du hast mehrere fehler:
    PHP-Code:
    $inner = array(
         
    'artikelnummer' => $row['test'],  
         
    'artikelmehrfachauswahl' => $row['test'],  
         
    'verpackungseinheit' => $row['test'],  
         
    'artikelnummerziel' => $row['test']
    );
    // sollte imho so aussehen:
    $inner[] = array(
         
    'artikelnummer' => $row['test'],  
         
    'artikelmehrfachauswahl' => $row['test'],  
         
    'verpackungseinheit' => $row['test'],  
         
    'artikelnummerziel' => $row['test']
    ); 
    ka, was du damit bezweckst:
    PHP-Code:
    array_push($arr$inner); 
    und assoz arrays lassen sich nicht über den index ansprechen, versuchs mal so:
    PHP-Code:
    foreach($inner as $a
    {
        
    $xml->push('artiksatz');
        
    $xml->push('artikelstamm'$a);
        foreach(
    $a as $k=>$v)
        {
             
    $xml->element($k$v);
        }

    Kissolino.com

    Kommentar


    • #3
      Hallo Wurzel,

      oh mann. Ich habe nun echt Verständinsschwierigkeiten mit dem foreach und Arrays.

      Weiß jetzt in der foreach Schleife echt nicht weiter. Weil manche Funktionenaufrufe ja kein $xml->element($k, $v); benötigen.
      Das sind ja die aufgehenden Tags für die XML Datei.
      Könntest du mir bitte mal sagen wie ich das in der foreach Schleife weiterführen muss? Habe schon angefangen. Aber ich denke so ist es falsch.


      PHP-Code:
      mysql_connect($dbHost$dbUser$dbPassword) or $this->error(""mysql_error(), mysql_errno());  
      mysql_select_db($dbName);  

      $sql "SELECT    * 
              FROM   artikeldetails ad, bestellinfo bi, de_produktinfo de_pi, produktinfo pi, 
                              products_hyrachie ph, products p
                 WHERE  (ad.d_artikelnummer = bi.d_artikelnummer)
                    AND    (bi.product_id = de_pi.product_id)
                    AND    (pi.product_id = de_pi.product_id)
                    AND    (p.product_id = bi.product_id)
                    AND    (p.category = ph.cat_id)"
      ;
                                      
      $result mysql_query($sql);
      $xml = new XmlWriter();

      // Werte
      $i 0;

      while (
      $row mysql_fetch_array($result)) {
                   
      $inner[] = array(
                                       
      'artikelnummer' => test,  //  
                                       
      'artikelmehrfachauswahl' => test,  //
                                                                        
      'verpackungseinheit' => test,  // 
                                                                        
      'artikelbezeichnung' =>test,  // 
                                                                        
      'artikelbezeichnung1' => test,  // 
                                                                        
      'artikelbeschreibung' => test,  // 
                                                                        
      'verpackungsinhalt' =>test,  // 
                                                                        
      'herstellernummer' =>test,  // 
                                                                        
      'herstellername' =>test,  // 
                                                                        
      'artikelbild' => test,  // 
                                                                        
      'thumbnail' => test,  // 
                                                                     
      'status' => test,  // 
                                                                     
      'suchtext' => test,  // 
                                                                        
      'hilfsmittelnummer' => test,  // 
                                                                        
      'pharmazentralnummer' => test,  // 
                                                                        
      'adrnummer' => test,  // 
                                                                        
      'unnummer' =>test,  // 
                                                                        
      'empfendverbrauchpreis' => test,  // 
                                                                     
      'de' => test,  // 
                                                                        
      'zolltarifnummer' => test,  // 
                                                                        
      'zolltarifnummer' => test,  // 
                                                                        
      'leasing' => test,  // 
                                                                        
      'preis' => test,  // 
                                                                        
      'preisgruppenkz' => test,  // 
                                                                        
      'gueltigab' => test,  // 
                                                                        
      'waehrungskz' => test,  // 
                                                                        
      'verkaufsmenge' => test,  // 
                                                                        
      'preis' => test,  // 
                                                                        
      'Preisgruppenkz' => test,  // 
                                                                        
      'gueltigab' => test,  // 
                                                                        
      'waehrungsKZ' => test,  // 
                                                                        
      'verkaufsmenge' => test,  // 
                                                                        
      'preis' => test,  // 
                                                                        
      'preisgruppenkz' => test,  // 
                                                                        
      'gueltigab' => test,  // 
                                                                        
      'waehrungsKZ' => test,  // 
                                                                        
      'verkaufsmenge' => test,  // 
                                                                        
      'preis' => test,  // 
                                                                        
      'Preisgruppenkz' =>test,  // 
                                                                        
      'gueltigab' => test,  // 
                                                                        
      'waehrungsKZ' => test,  // 
                                                                        
      'verkaufsmenge' => test,  // 
                                                                        
      'preis' => test,  // 
                                                                        
      'gruppennummer' => test,  // 
                                                                        
      'referenz' => test,  // 
                                                                        
      'bezeichnung' => test,  // 
                                                                        
      'art' => test,  // 
                                                                        
      'typ' => test,  // 
                                                                        
      'artikelnummerziel' => test); // 


      echo 
      "<pre>";
      print_r($outer);
      echo 
      "</pre>";
                                                                      
      $xml->push('artikel', array('transaction' => 'reinit'));

      // Tags
      foreach($inner as $a) {
          foreach(
      $a as $k => $v) {
              
      $xml->push('artiksatz');
                          
      $xml->element('artikelnummer'$a);
              
      $xml->push('artikelstamm'$a);
                          
      $xml->element($k$v);
              
      $xml->pop();
                          
      $xml->push('preise');
                          
      $xml->push('preissatz');
              
      $xml->element($k$v);                                
              
      $xml->element($k$v);                                
          
      $xml->element('gueltigab'$a);                                
          
      $xml->element('waehrungsKZ'$a);
          
      $xml->element('verkaufsmenge'$a);
          
      $xml->pop();    // preissatz            
                      
                      
      $xml->push('preissatz');
                      
      $xml->element('preis'$a);                                
          
      $xml->element('Preisgruppenkz'$a);                                
          
      $xml->element('gueltigab'$a);                                
          
      $xml->element('waehrungsKZ'$a);
          
      $xml->element('verkaufsmenge'$a);
          
      $xml->pop();  // preissatz                

                      
      $xml->push('preissatz');
                      
      $xml->element('preis'$a);                                
          
      $xml->element('Preisgruppenkz'$a);                                
          
      $xml->element('gueltigab'$a);                                
          
      $xml->element('waehrungsKZ'$a);
          
      $xml->element('verkaufsmenge'$a);
          
      $xml->pop();  // preissatz                

                      
      $xml->push('preissatz');
                      
      $xml->element('preis'$a);                                
          
      $xml->element('Preisgruppenkz'$a);                                
          
      $xml->element('gueltigab'$a);                                
          
      $xml->element('waehrungsKZ'$a);
          
      $xml->element('verkaufsmenge'$a);
          
      $xml->pop();  // preissatz
          
      $xml->pop();  // preise
                      
      $xml->push('artikelgruppenzuordnungen');                
          
      $xml->element('gruppennummer'$a);
          
      $xml->pop();  // artikelgruppenzuordnungen
                      
      $xml->push('medienverweise');                
                      
      $xml->push('medienverweis');                                                
          
      $xml->element('referenz'$a);
          
      $xml->element('bezeichnung'$a);
          
      $xml->element('art'$a);
          
      $xml->element('typ'$a);
          
      $xml->pop();  // medienverweis
          
      $xml->pop();  // medienverweise
                      
      $xml->push('artikelverweise');                
                      
      $xml->push('artikelverweis''variante');
          
      $xml->element('artikelnummerziel'$a);                
          
      $xml->pop(); // artikelverweis
          
      $xml->pop(); // artikelverweise                
      }

      $xml->pop();
      echo 
      $xml->getXml(); 
      Zuletzt geändert von compuboy1010; 15.04.2004, 11:40.

      Kommentar


      • #4
        du musst dir (und mir) erstmal klar machen, was am ende rauskommen soll.

        wenn die klasse die wertzuweisungen in einer bestimmten reihenfolge
        erwartet, solltest du dir diese reihenfolge erstmal mit pseudocode
        skizzieren. so komplex wie deine foreach-schleifen jetzt aussehen (in der
        tat scheint mir das ein wenig konfus), solltest du dir überlegen, aus der
        foreach heraus unterschiedliche funktionen aufzurufen, die dann die
        wertzuweisung übernehmen.

        anhand deines codes ^^ kann ich nicht erkennen, welchem logischen
        ablauf die wertzuweisung zur klasse erfolgt ... einige werte kommen aus
        der db ... bei anderen ist nicht zu erkennen, woher sie kommen ... zudem
        solltest du dir überlegen, in welcher beziehung diese werte zueinander
        bestehen. ohne da eine eindeutigkeit zu haben, ist (fast) jeder hinweis,
        den dir hier jemand geben kann nur allgemeiner natur, weil wir blind im
        nebel rumstochern. als beispiel:
        PHP-Code:
        $xml->push('artiksatz');
            
        $xml->element('artikelnummer'$a);
        $xml->push('artikelstamm'$a);
            
        $xml->element($k$v);
        $xml->pop();

        $xml->push('preise');
        $xml->push('preissatz');
            
        $xml->element($k$v);                                
            
        $xml->element($k$v);                                
            
        $xml->element('gueltigab'$a);                                
            
        $xml->element('waehrungsKZ'$a);
            
        $xml->element('verkaufsmenge'$a);
        $xml->pop();    // preissatz 
        ich kann hier keine regel in der abfolge von push, element & pop erkennen ...
        auch keine steuermöglichkeit, aus der man eine regel ableiten kann ... da
        solltest du zuerst ansetzen.
        Kissolino.com

        Kommentar


        • #5
          Hallo Wurzel,

          tut mir leid, wenn es ein wenig unübersichtlich erscheint.
          Also die Tags stehen so im Zusammenhang

          Die Push Funktion eröffnet einen nicht schließenden Tag und packt ihn auf den Stack.

          Die Element Funktion eröffnet einen Tag mit dem Namen des übergebenen ertsen Wertes und mit dem Wert des zweiten Wertes.

          Die Pop Funktion holt sich das zuletzt nicht geschlossene(also von push) wieder vom Stack und schließt es.

          $xml->push('artiksatz');
          $xml->element('artikelnummer', $a[0]);
          $xml->push('artikelstamm', $a[++$i]);
          $xml->element('artikelmehrfachauswahl', $a[++$i]);
          $xml->element('verpackungseinheit', $a[++$i]);
          $xml->element('artikelbezeichnung2', $a[++$i]);
          $xml->element('artikelbezeichnung1', $a[++$i]);
          $xml->element('artikelbeschreibung', $a[++$i]);
          $xml->element('verpackungsinhalt', $a[++$i]);
          $xml->element('artikelzusatzangabe', $a[++$i]);
          $xml->element('herstellernummer', $a[++$i]);
          $xml->element('herstellername', $a[++$i]);
          $xml->element('artikelbild', $a[++$i]);
          $xml->element('thumbnail', $a[++$i]);
          $xml->element('status', $a[++$i]);
          $xml->element('suchtext', $a[++$i]);
          $xml->element('hilfsmittelnummer', $a[++$i]);
          $xml->element('pharmazentralnummer', $a[++$i]);
          $xml->element('adrnummer', $a[++$i]);
          $xml->element('unnummer', $a[++$i]);
          $xml->element('empfendverbrauchpreis', $a[++$i]);
          $xml->element('ursprungsland', $a[++$i]);
          $xml->element('zolltarifnummer', $a[++$i]);
          $xml->element('mwst', $a[++$i]);
          $xml->element('leasing', $a[++$i]);
          $xml->pop();
          $xml->push('preise');

          $xml->push('preissatz');
          $xml->element('preis', $a[++$i]);
          $xml->element('Preisgruppenkz', $a[++$i]);
          $xml->element('gueltigab', $a[++$i]);
          $xml->element('waehrungsKZ', $a[++$i]);
          $xml->element('verkaufsmenge', $a[++$i]);
          $xml->pop(); // preissatz

          $xml->push('preissatz');
          $xml->element('preis', $a[++$i]);
          $xml->element('Preisgruppenkz', $a[++$i]);
          $xml->element('gueltigab', $a[++$i]);
          $xml->element('waehrungsKZ', $a[++$i]);
          $xml->element('verkaufsmenge', $a[++$i]);
          $xml->pop(); // preissatz

          $xml->push('preissatz');
          $xml->element('preis', $a[++$i]);
          $xml->element('Preisgruppenkz', $a[++$i]);
          $xml->element('gueltigab', $a[++$i]);
          $xml->element('waehrungsKZ', $a[++$i]);
          $xml->element('verkaufsmenge', $a[++$i]);
          $xml->pop(); // preissatz

          $xml->push('preissatz');
          $xml->element('preis', $a[++$i]);
          $xml->element('Preisgruppenkz', $a[++$i]);
          $xml->element('gueltigab', $a[++$i]);
          $xml->element('waehrungsKZ', $a[++$i]);
          $xml->element('verkaufsmenge', $a[++$i]);
          $xml->pop(); // preissatz
          $xml->pop(); // preise
          $xml->push('artikelgruppenzuordnungen');
          $xml->element('gruppennummer', $a[++$i]);
          $xml->pop(); // artikelgruppenzuordnungen
          $xml->push('medienverweise');
          $xml->push('medienverweis');
          $xml->element('referenz', $a[++$i]);
          $xml->element('bezeichnung', $a[++$i]);
          $xml->element('art', $a[++$i]);
          $xml->element('typ', $a[++$i]);
          $xml->pop(); // medienverweis
          $xml->pop(); // medienverweise
          $xml->push('artikelverweise');
          $xml->push('artikelverweis', 'variante');
          $xml->element('artikelnummerziel', $a[++$i]);
          $xml->pop(); // artikelverweis
          $xml->pop(); // artikelverweise

          Nur wie ich diese Reihenfolge nun mit dem for each hinbekomme weiß ich echt nicht.

          Kommentar


          • #6
            unübersichtlich hin oder her ... die "regelmässigkeit" in der struktur zu erkennen, ist erstmal die hauptaufgabe ... für den rest gibts dann nur noch fleisssternchen.

            - spontan würde ich mir erstmal ein steuer-array bauen, das die pushs und die anzahl der dazugehörigen datensätze beschreibt

            - dann beim aufbau des arrays $inner von assoziativ auf indiziert umsteigen, ggfls. hier noch eine weitere ebene einfügen

            - gesteuert würde das ganze vom steuerarray => 1. schleife ... darin verschachtelt laufen weitere schleifen, die über bedingungen pushen, elementen oder poppen

            ... ohne das selber ausprobieren zu können, kann ich da nicht mehr zu sagen ... ausserdem würd ichs ja dann machen und nicht du
            Kissolino.com

            Kommentar


            • #7
              Hallo,

              das mit den Steuerarrays und mehrfach verschachtelten foreach Schleifen ist mir zu kompliziert.

              Bin jetzt wieder zu integer indizierten Arrays:

              Wenn mir doch nur jemand sagen könnte warum diese Fehlermeldung kommt:

              "Invalid argument supplied for foreach()" dann könnte ich das Problem schon lösen.

              PHP-Code:
              while ($row mysql_fetch_array($result)) {
                           
              $inner[] = array('test',  // 'artikelnummer' =>  
                                               
              'test',  // 'artikelmehrfachauswahl' => 
                                                                                
              'test',  // 'verpackungseinheit' => 
                                                                                
              'test',  // 'artikelbezeichnung' =>
                                                                                
              'test',  // 'artikelbezeichnung1' => 
                                                                                
              'test',  // 'artikelbeschreibung' => 
                                                                                
              'test',  // 'verpackungsinhalt' =>
                                                                                
              'test',  // 'herstellernummer' =>
                                                                                
              'test',  // 'herstellername' =>
                                                                                
              'test',  // 'artikelbild' => 
                                                                                
              'test',  // 'thumbnail' => 
                                                                             
              'test',  // 'status' => 
                                                                             
              'test',  // 'suchtext' => 
                                                                                
              'test',  // 'hilfsmittelnummer' => 
                                                                                
              'test',  // 'pharmazentralnummer' => 
                                                                                
              'test',  // 'adrnummer' => 
                                                                                
              'test',  // 'unnummer' =>
                                                                                
              'test',  // 'empfendverbrauchpreis' => 
                                                                             
              'test',  // 'de' => 
                                                                                
              'test',  // 'zolltarifnummer' => // 
                                                                                
              'test',  // 'zolltarifnummer' => 
                                                                                
              'test',  // 'leasing' => 
                                                                                
              'test',  // 'preis' => 
                                                                                
              'test',  // 'preisgruppenkz' => 
                                                                                
              'test',  // 'gueltigab' => 
                                                                                
              'test',  // 'waehrungskz' => 
                                                                                
              'test',  // 'verkaufsmenge' => 
                                                                                
              'test',  // 'preis' => 
                                                                                
              'test',  // 'Preisgruppenkz' => 
                                                                                
              'test',  // 'gueltigab' => 
                                                                                
              'test',  // 'waehrungsKZ' => 
                                                                                
              'test',  // 'verkaufsmenge' => 
                                                                                
              'test',  // 'preis' => 
                                                                                
              'test',  // 'preisgruppenkz' => 
                                                                                
              'test',  // 'gueltigab' => 
                                                                                
              'test',  // 'waehrungsKZ' => 
                                                                                
              'test',  // 'verkaufsmenge' => 
                                                                                
              'test',  // 'preis' => 
                                                                                
              'test',  // 'Preisgruppenkz' =>
                                                                                
              'test',  // 'gueltigab' => 
                                                                                
              'test',  // 'waehrungsKZ' => 
                                                                                
              'test',  // 'verkaufsmenge' => 
                                                                                
              'test',  // 'preis' => 
                                                                                
              'test',  // 'gruppennummer' => 
                                                                                
              'test',  // 'referenz' => 
                                                                                
              'test',  // 'bezeichnung' => 
                                                                                
              'test',  // 'art' => 
                                                                                
              'test',  // 'typ' => 
                                                                                
              'test'); // 'artikelnummerziel' => 


              $xml->push('artikel', array('transaction' => 'reinit'));

              echo 
              "<pre>";
              echo 
              print_r($inner);
              echo 
              "</pre>";

              // Tags
              foreach($inner as $a) {
              $i 0;
                  
              $xml->push('artiksatz');
                  
              $xml->element('artikelnummer'$a[++$i]);
                  
              $xml->push('artikelstamm'$a[++$i]);
                  
              $xml->element('artikelmehrfachauswahl'$a[++$i]);
                  
              $xml->element('verpackungseinheit'$a[++$i]);
                  
              $xml->element('artikelbezeichnung2'$a[++$i]);
                  
              $xml->element('artikelbezeichnung1'$a[++$i]);
                  
              $xml->element('artikelbeschreibung'$a[++$i]);
                  
              $xml->element('verpackungsinhalt'$a[++$i]);
                  
              $xml->element('artikelzusatzangabe'$a[++$i]);
                  
              $xml->element('herstellernummer'$a[++$i]);
                  
              $xml->element('herstellername'$a[++$i]);
                  
              $xml->element('artikelbild'$a[++$i]);
                  
              $xml->element('thumbnail'$a[++$i]);
                  
              $xml->element('status'$a[++$i]);
                  
              $xml->element('suchtext'$a[++$i]);
                  
              $xml->element('hilfsmittelnummer'$a[++$i]);
                  
              $xml->element('pharmazentralnummer'$a[++$i]);
                  
              $xml->element('adrnummer'$a[++$i]);
                  
              $xml->element('unnummer'$a[++$i]);
                  
              $xml->element('empfendverbrauchpreis'$a[++$i]);
                  
              $xml->element('ursprungsland'$a[++$i]);
                  
              $xml->element('zolltarifnummer'$a[++$i]);
                  
              $xml->element('mwst'$a[++$i]);
                  
              $xml->element('leasing'$a[++$i]);
                  
              $xml->pop();
                  
              $xml->push('preise');            
                              
                  
              $xml->push('preissatz');
                              
              $xml->element('preis'$a[++$i]);                                
                  
              $xml->element('Preisgruppenkz'$a[++$i]);                                
                  
              $xml->element('gueltigab'$a[++$i]);                                
                  
              $xml->element('waehrungsKZ'$a[++$i]);
                  
              $xml->element('verkaufsmenge'$a[++$i]);
                  
              $xml->pop();  // preissatz                

                              
              $xml->push('preissatz');
                              
              $xml->element('preis'$a[++$i]);                                
                  
              $xml->element('Preisgruppenkz'$a[++$i]);                                
                  
              $xml->element('gueltigab'$a[++$i]);                                
                  
              $xml->element('waehrungsKZ'$a[++$i]);
                  
              $xml->element('verkaufsmenge'$a[++$i]);
                  
              $xml->pop();  // preissatz                

                              
              $xml->push('preissatz');
                              
              $xml->element('preis'$a[++$i]);                                
                  
              $xml->element('Preisgruppenkz'$a[++$i]);                                
                  
              $xml->element('gueltigab'$a[++$i]);                                
                  
              $xml->element('waehrungsKZ'$a[++$i]);
                  
              $xml->element('verkaufsmenge'$a[++$i]);
                  
              $xml->pop();  // preissatz
                  
              $xml->pop();  // preise
                              
              $xml->push('artikelgruppenzuordnungen');                
                  
              $xml->element('gruppennummer'$a[++$i]);
                  
              $xml->pop();  // artikelgruppenzuordnungen
                              
              $xml->push('medienverweise');                
                              
              $xml->push('medienverweis');                                                
                  
              $xml->element('referenz'$a[++$i]);
                  
              $xml->element('bezeichnung'$a[++$i]);
                  
              $xml->element('art'$a[++$i]);
                  
              $xml->element('typ'$a[++$i]);
                  
              $xml->pop();  // medienverweis
                  
              $xml->pop();  // medienverweise
                              
              $xml->push('artikelverweise');                
                              
              $xml->push('artikelverweis''variante');
                  
              $xml->element('artikelnummerziel'$a[++$i]);                
                  
              $xml->pop(); // artikelverweis
                  
              $xml->pop(); // artikelverweise                

              Zuletzt geändert von compuboy1010; 15.04.2004, 13:24.

              Kommentar

              Lädt...
              X