Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrdimensionales Array auswerten

Einklappen

Neue Werbung 2019

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

  • Mehrdimensionales Array auswerten

    Hallo,

    ich bin hier am knobeln, und komme nicht weiter.
    Wie kann ich in einem mehrdimensionalen Array bestimmte Werte auslesen.
    Also wie kann ich in nachfolgendem simple-Beispiel nur die "Unterarrays" (wie nennt man die eigentlich richtig ?) ausgeben, bei denen category=111 ist ?

    Besten Dank schonmal im voraus !


    PHP-Code:
    <?

    error_reporting(E_ALL);

        function liescsv()
        {
              global $books;  
                     $books = array(
                          'book1' => array(
                          'title' => 'Tarzan',
                          'author' => 'Jane',
                          'publisher' => 'Cheeta',
                          'category' => '111'),
                          'book2' => array(
                          'title' => 'Tarzan2',
                          'author' => 'Jane',
                          'publisher' => 'Cheeta',
                          'category' => '111'),
                          'book3' => array(
                          'title' => 'Moby Dick',
                          'author' => 'Wildecker Herzbuben',
                          'publisher' => 'Werauchimmer',
                          'category' => '222'),
                          'book4' => array(
                          'title' => 'Tarzan3',
                          'author' => 'Jane',
                          'publisher' => 'Cheeta',
                          'category' => '111')
                          );  
                       }

    liescsv();

    echo "<pre>\n";
    print_r($books);
    echo "</pre>\n";

    ?>
    Jeder Mensch ist klug !
    Der eine vorher, der andere nachher ...

  • #2
    Du musst einfach beide als Schleife durchlaufen (foreach empfiehlt sich). Wenn du ein Array durchläufst, dann sind deren Werte in diesem Fall auch Arrays und können ebenso durchlaufen werden.

    Ansonsten: Deine Funktion ist so garnicht durchdacht, richtig? Kein Rückgabewert, dafür global?

    PHP-Code:
    function liescsv () {
      
    // do something
      
    return $books;
    }

    $books liescsv (); 
    Nicht jeder Fehler ist ein Bug.

    Kommentar


    • #3
      Hallo,
      wie KingCrunch schon erwähnt hat, solltest du statt "global" ein "return" verwenden.

      Dein Array an sich ist auch suboptimal eingrückt, denn ja auch hier läßt sich durch geeignete Whitespaces das Code-Reading verbessern.

      Ein weiterer Ansatzpunkt ist, dass wieder einmal Deutsch mit Englisch gemischt wurde, entscheid dich doch einfach für eine Sprache.

      Abgesehen davon ist deine Funktionsbeschreibung auch irreführend. Deine Funktion liest kein CSV, es definiert höchstens eine CSV-Struktur (was aber auch geraten ist).

      Zu guter letzt: Warum nummerierst du die Schlüssel der ersten Dimension durch? Verzichte doch gleich auf das "book" Prefix und heraus käme ein numerisch indizierter Array.

      PHP-Code:
      <?php
      function GetCsvStructure()
      {
          return array(
      'book1' => array('title'     => 'Tarzan',
                                        
      'author'    => 'Jane',
                                        
      'publisher' => 'Cheeta',
                                        
      'category'  => '111'),
                       
      'book2' => array('title' => 'Tarzan2',
                                        
      'author' => 'Jane',
                                        
      'publisher' => 'Cheeta',
                                        
      'category' => '111'),
                       
      'book3' => array('title' => 'Moby Dick',
                                        
      'author' => 'Wildecker Herzbuben',
                                        
      'publisher' => 'Werauchimmer',
                                        
      'category' => '222'),
                       
      'book4' => array('title' => 'Tarzan3',
                                        
      'author' => 'Jane',
                                        
      'publisher' => 'Cheeta',
                                        
      'category' => '111'));  
      }
      ?>
      Übersicht gewonnen? (Edit: leider ist keine proportionale Schrift für den Code eingestellt)

      Nur die Unterarrays (einen genormten Namen dafür kenne ich nicht) einer bestimmten Kategorie kannst du mit der Funktion array_filter() erhalten:
      http://de.php.net/array_filter

      Kommentar


      • #4
        Hallo,

        ihr habt beide recht ...
        Der Code sieht nicht nur Schei... aus, er ist es auch noch ...


        Zitat von Zergling
        ... Deine Funktion liest kein CSV ... einer bestimmten Kategorie kannst du mit der Funktion array_filter() erhalten ...
        Die Funktion "liescsv" liest im "echten Leben" wirklich aus einer csv-Datei.
        Den Multi-Array hab ich lediglich im "Klartext" geschrieben, damit es etwas klarer wird, worum es mir geht.
        (OK, ist mir wohl auch nicht so gut gelungen ... )

        Die "Unterarrays" haben keinen fortlaufenden Namen, sondern "Wortkurzformen" der jeweiligen Treffer aus der csv-Datei.
        array_filter kannte ich noch nicht ... und bisher begreif ich es auch noch nicht, aber ich werd mal googeln und lesen ...

        Zitat von KingCrunch
        Du musst einfach beide als Schleife durchlaufen (foreach empfiehlt sich).
        Das sagst du so einfach. Mit foreach "spiele" ich schon den halben Tag, aber entweder denke ich zu kompliziert, oder es ist für mich zu kompliziert ...
        Aber gut zu wissen, dass ich zumindestens auf dem richtigen Weg war ...


        Besten Dank euch beiden !
        Jeder Mensch ist klug !
        Der eine vorher, der andere nachher ...

        Kommentar


        • #5
          Warum googlen, das PHP-Handbuch ist mehr als ausreichend um die Funktion zu verstehen und Beispiele geliefert zu bekommen.

          array_filter() bekommt einen Array und einen Funktionsnamen übergeben. Diese Funktion bekommt dann einzeln die Elemente des Arrays. Je nachdem ob diese Funktion für das Element dann TRUE oder FALSE zurückliefert, ist dieses Element dann teil des von array_filter() zurückgegebenen Arrays.

          Wenn du dir nicht sicher bist, auch bei foreach (), was in einer Variable steht, benutz var_dump() oder print_r() zur Ausgabe. Raten ist nicht nötig.

          Kommentar

          Lädt...
          X