Vorkommen im Multiarray darstellen
Sabine
- php
0 Baba0 Rainer0 Tabellenkalk0 Sabine
1 dedlfix
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
Wie kann ich das am effektivsten lösen? Vermutlich in einem Foreach, aber wie Counte ich das?
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
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]++; }
Hey, ich hatte eher an array_key_exists() gedacht, aber isset() tut es genauso.
Cheers, Baba
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
- Tomate mit 3 Einträgen
- Ingwer mit 2 Einträgen
- Glutamat mit 1 Eintrag.
Hallo,
leicht zu überlesen:
im $bsparray[x][1]
- Wasser mit 4 Einträgen ;-)
Ich kann an zweiter Stelle kein Wasser entdecken. :p
Gruß Kalk
Hallo,
leicht zu überlesen:
im $bsparray[x][1]
- Wasser mit 4 Einträgen ;-)
Ich kann an zweiter Stelle kein Wasser entdecken. :p
Gruß Kalk
Das war aber auch gemein von mir ;-)
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.
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) );