Array Top-Ten

Hallo Groupler,

ich möchte mein zweidimensionales Array in einer Top-Ten Liste ausgeben.
also eine Dimension enthält die Anzahl die dann addiert werden soll und
die andere die Bezeichnung.


Also aus:

4 Äpfel
5 Birne
2 Äpfel
15 Feige
3 Birne

mach:

Pos Anzahl Bez.
1 15 Feige
2 6 Äpfel
3 8 Birne
usw.



Grüße Daniel
Daniel Schmidt [ So, 26 August 2007 18:34 ] [ ID #1805728 ]

Re: Array Top-Ten

Am Sun, 26 Aug 2007 18:34:57 +0200 schrieb Daniel Schmidt:

> Hallo Groupler,
>
> ich möchte mein zweidimensionales Array in einer Top-Ten Liste ausgeben.
> also eine Dimension enthält die Anzahl die dann addiert werden soll und
> die andere die Bezeichnung.

asort (<http://de3.php.net/manual/de/function.asort.php>) funktioniert
nicht?
Norbert Melzer [ So, 26 August 2007 18:41 ] [ ID #1805729 ]

Re: Array Top-Ten

Daniel Schmidt schrieb:

> ich möchte mein zweidimensionales Array in einer Top-Ten Liste ausgeben.
> also eine Dimension enthält die Anzahl die dann addiert werden soll und
> die andere die Bezeichnung.

Dann schreib Dir ein Programm, das das macht.

Wo ist das Problem?

Gruß. Claus
Claus Reibenstein [ So, 26 August 2007 18:50 ] [ ID #1805730 ]

Re: Array Top-Ten

> Dann schreib Dir ein Programm, das das macht.

würd ich gern, finde aber keinen Ansatz.

Gruß, Daniel
Daniel Schmidt [ So, 26 August 2007 19:05 ] [ ID #1805733 ]

Re: Array Top-Ten

> asort (<http://de3.php.net/manual/de/function.asort.php>) funktioniert
> nicht?

nein, es soll ja die Anzahl der Früchte ausgegeben werden, sortiert und
von viel nach wenig - eine Top-Ten Liste eben.
Daniel Schmidt [ So, 26 August 2007 19:05 ] [ ID #1805734 ]

Re: Array Top-Ten

Daniel Schmidt schrieb:

>ich möchte mein zweidimensionales Array in einer Top-Ten Liste ausgeben.

usort().

--
Wolfgang Fellger
Wolfgang Fellger [ So, 26 August 2007 19:17 ] [ ID #1805735 ]

Re: Array Top-Ten

> usort().

u und asort wird hier nicht gehen, da ich ja die anzahl aller z.B. Äpfel
haben möchte

Gruß Daniel
Daniel Schmidt [ So, 26 August 2007 19:25 ] [ ID #1805736 ]

Re: Array Top-Ten

Wolfgang Fellger schrieb:

>usort().

Ach, ich sehe grade, ich habe deine Angaben ungenau gelesen. Du kannst
mehrere gleiche Einträge haben. Gut, die musst du eben erst zusammenfassen.

$output = array();
foreach($input as $item)
{
$output[$item['frucht']] += $item['anzahl'];
}

oder so.

--
Wolfgang Fellger
Wolfgang Fellger [ So, 26 August 2007 19:28 ] [ ID #1805737 ]

Re: Array Top-Ten

Daniel Schmidt wrote:
>> Dann schreib Dir ein Programm, das das macht.
>
> würd ich gern, finde aber keinen Ansatz.

Programmiergrundlagen must Du dir schon selbst aneignen. Was nützt es
wenn Du Code hast und nicht verstehst was dieser tut?

Ja das Arbeiten mit Arrays ist eine Grundlage! (und noch dazu sehr einfach)

http://www.php.net/manual/de/language.types.array.php

MfG, Ulf

--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Ulf Kadner [ So, 26 August 2007 19:54 ] [ ID #1805738 ]

Re: Array Top-Ten

Daniel Schmidt schrieb:
> 4 Äpfel
> 5 Birne
> 2 Äpfel
> 15 Feige
> 3 Birne
>
> mach:
>
> Pos Anzahl Bez.
> 1 15 Feige
> 2 6 Äpfel
> 3 8 Birne
> usw.

<?php
$a = array
( array('Typ'=>'Äpfel','Anzahl'=>4),
array('Typ'=>'Birne','Anzahl'=>5),
array('Typ'=>'Äpfel','Anzahl'=>2),
array('Typ'=>'Feige','Anzahl'=>15),
array('Typ'=>'Birne','Anzahl'=>3)
);

$b = array();
foreach ($a as $var)
{
if (array_key_exists($var['Typ'],$b))
$b[$var['Typ']]+=$var['Anzahl'];
else
$b[$var['Typ']]=$var['Anzahl'];
}

arsort ($b);

echo "Pos Anzahl Bez\r\n";
$Pos = 1;
foreach($b as $key=>$value)
{
echo $Pos++ . "\t$key\t$value\r\n";
}
?>

viele grüße
ralph
rkhbng [ So, 26 August 2007 21:03 ] [ ID #1805741 ]

Re: Array Top-Ten

Daniel Schmidt schrieb:

>> Dann schreib Dir ein Programm, das das macht.
>
> würd ich gern, finde aber keinen Ansatz.

Dein Problem ist also nicht PHP, sondern die Entwicklung des
Algorithmus. Damit bist Du hier erst einmal falsch.

Gruß. Claus
Claus Reibenstein [ So, 26 August 2007 22:44 ] [ ID #1805742 ]

Re: Array Top-Ten

Daniel Schmidt wrote:
> ich möchte mein zweidimensionales Array in einer Top-Ten Liste ausgeben.
> also eine Dimension enthält die Anzahl die dann addiert werden soll und
> die andere die Bezeichnung.
>
> Also aus:
>
> 4 Äpfel
> 5 Birne
> 2 Äpfel
> 15 Feige
> 3 Birne
>
> mach:
>
> Pos Anzahl Bez.
> 1 15 Feige
> 2 6 Äpfel
> 3 8 Birne
> usw.

$fruits = array(
array( 4, 'Äpfel'),
array( 5, 'Birne'),
array( 2, 'Äpfel'),
array(15, 'Feige'),
array( 3, 'Birne'));

$countedFruits = array();

function countFruits(&$a, $key, &$a2)
{
$a2[$a[1]] += $a[0];
}

array_walk($fruits, 'countFruits', &$countedFruits);

echo '<pre>$fruits = ';
print_r($fruits);
echo "\n" . '$countedFruits = ';
print_r($countedFruits);
echo '</pre>';

Der Rest (u.a. das Sortieren dieses Arrays mit uasort()) bleibt dem
geneigten Leser zur Übung überlassen.

http://php.net/array


HTH

PointedEars
PointedEars [ Mo, 27 August 2007 03:04 ] [ ID #1806351 ]
PHP » de.comp.lang.php.misc » Array Top-Ten

Vorheriges Thema: OT: Dateien mergen
Nächstes Thema: Imagemagick: einzelnes Bild aus GIF-Animation extrahieren?