Ich habe mir mal erlaubt dein Skript sinngemäß umzubauen, so dass es mit Arrays arbeitet:
Code: Alles auswählen
//Array "anz" für anzahl
//Array "gewinn" für das Ergebnis
//array "ursprung" für das was man reingibt
//array "summe_anz" für die bisherige Anzahl
$summe_anz = 0;
for($i = 0; $i < 3; $i++)
{
//Wenn insgesamt auf den bisherigen Plaetzen nur so viele Personen waren wie es Plaetze gibt...
if($anz[$i] == 1 && $summe_anz <= $i)
{
$gewinn[$i] = $ursprung[$i];
}
//Diesen Platz auslassen bei mehr vergebenen als bisherigen Plaetzen:
elseif($summe_anz > $i)
{
//Hier muss man nix tun
}
//Einzig verbleibender Fall: Mehr personen auf diesem aktuellen Platz:
else
{
//Gewinn der folgenden Plaetze summieren und durch die Zahl der Gewinner teilen:
$sum = 0;
for($j = $i; $j <= $anz[$i]; $j++)
{
$sum = $sum + $ursprung[$j];
}
$gewinn[$i] = $sum / $anz[$i];
}
// Noch die Personenzahl hochzaehlen:
$summe_anz = $summe_anz + $anz[$i];
}
Sinngemäß deshalb, weil ich versucht habe zu interpretieren, was du da vorhast. Du musst nur noch die Arrays $anz und $ursprung füllen, wobei ersteres die Anzahl der Gewinner ist, die sich den Preis teilen und zweiteres der Gewinn der für den jeweiligen Platz vorgesehen ist. Wird ein Platz mehrfach vergeben, dann fallen die Folgeplätze so lange weg, bis die Zahl der schon verarbeiteten Gewinner wieder mit dem gerade vergebenen Platz übereinstimmt (d.h. bei zwei ersten Plätzen fällt der zweite weg und der nächste vergebene ist der dritte, bei drei ersten fällt auch der dritte weg usw.).
Der Vorteil an Arrays liegt in deren Skalierbarkeit. Das Skript ist zwar für deine drei Plätze ähnlich lang wie in deinem Fall, aber wird für mehr Plätze auch nicht mehr länger, sondern es ändert sich nur die Arraygröße und ein paar Zahlenindizes. Du kannst Arrays einfacher auf gleiche Weise verarbeiten (in Schleifen nämlich). Während du den gleichen Code drei mal hast (und bei mehr Plätzen entsprechend noch öfter) schreibe ich mit den Arrays alles nur ein ein einziges mal hin. Das ist viel übersichtlicher.