Sabine: Vorkommen im Multiarray darstellen

Hallo,

ich habe ein Multiarray bei dem ich eine TOP 10 Liste der meisten vorkommenden Wörter erstellen will die sich jeweils im $bsparray[x][1] zu finden sind.

Bsp. $rezepte = array ( array( Tomatensuppe, Tomate, Wasser ), array ( Ingwersuppe, Ingwer, Wasser ), array ( Gullsuppe, Tomate, Porree ), array (Wassersuppe , Ingwer, Wasser) , array (Teufelsuppe, Tomate, Ketchup ), array (Glutamatsuppe, Glutamat, Wasser) );

Die Top3 wären dann

  1. Tomate mit 3 Einträgen
  2. Ingwer mit 2 Einträgen
  3. Glutamat mit 1 Eintrag.

Wie kann ich das am effektivsten lösen? Vermutlich in einem Foreach, aber wie Counte ich das?

  1. Sofern die Daten aus eine DB kommen würde das einfacher mit einer entsprechenden Datenbankabfrage zu realisieren sein.

    Wenn Du das wirklich in PHP machen willst:

    $zutaten= array();
    foreach($rezepte as $rezept){
    
       foreach($rezept as $zutat){
    
         # condition: wenn Zutat nicht in $zutaten
         if(condition) $zutaten[$zutat] = 1;
         else          $zutaten[$zutat]++;
    
       }
    
    }
    
    

    (ungetestet)

    Cheers, Baba

    --
    Baba kommt von Basketball
    1. Hallo Baba,

      ich habe die Daten nur aus einer vorgefilterten XML Datei vorliegen, daher gibt es keine DB die man einfach abfragen könnte. Die Idee mit dem array ist super, müsste ich dann in dem neuen $zutaten Array mit Isset suchen?

      Bsp:

           if(!isset($zutaten[$zutat])){ $zutaten[$zutat] = 1; }
           else { $zutaten[$zutat]++; }
      
      1. Hey, ich hatte eher an array_key_exists() gedacht, aber isset() tut es genauso.

        Cheers, Baba

        --
        Baba kommt von Basketball
  2. Bsp. $rezepte = array ( array( Tomatensuppe, Tomate, Wasser ), array ( Ingwersuppe, Ingwer, Wasser ), array ( Gullsuppe, Tomate, Porree ), array (Wassersuppe , Ingwer, Wasser) , array (Teufelsuppe, Tomate, Ketchup ), array (Glutamatsuppe, Glutamat, Wasser) );

    Die Top3 wären dann

    1. Tomate mit 3 Einträgen
    2. Ingwer mit 2 Einträgen
    3. Glutamat mit 1 Eintrag.
    1. Wasser mit 4 Einträgen ;-)
    1. Hallo,

      leicht zu überlesen:

      im $bsparray[x][1]

      1. Wasser mit 4 Einträgen ;-)

      Ich kann an zweiter Stelle kein Wasser entdecken. :p

      Gruß Kalk

      1. Hallo,

        leicht zu überlesen:

        im $bsparray[x][1]

        1. Wasser mit 4 Einträgen ;-)

        Ich kann an zweiter Stelle kein Wasser entdecken. :p

        Gruß Kalk

        Das war aber auch gemein von mir ;-)

  3. Tach!

    ich habe ein Multiarray bei dem ich eine TOP 10 Liste der meisten vorkommenden Wörter erstellen will die sich jeweils im $bsparray[x][1] zu finden sind.

    Mein Favorit ist eine Kombination aus array_count_values() und array_map():

    $noch_unsortiert_aber_gezählt = array_count_values(array_map(function ($item) { return $item[1]; }, $bsparray));

    array_map() erstellt hier ein neues Array aus den Werten an Position 1.

    dedlfix.

    1. Hakuna matata!

      $noch_unsortiert_aber_gezählt = array_count_values(array_map(function ($item) { return $item[1]; }, $bsparray));

      So würde ich es auch machen, ab PHP Version 5.5 geht es sogar noch etwas einfacher mit array_column.

      $noch_unsortiert_aber_gezaehlt = array_count_calues( array_column( $bsparray, 1) );

      --
      “All right, then, I'll go to hell.” – Huck Finn