Seite 1 von 2

Variablennamen hochzählen?

Verfasst: 07.08.2010 09:03
von Dungeonwatcher
Moin! 8)

Mit folgendem Code lese ich drei Werte aus einer DB aus:

Code: Alles auswählen

$sql = "SELECT COUNT(tipp_points) as anzahl FROM " . FORMEL_TIPPS_TABLE . "
	WHERE tipp_race = $race_id
	GROUP BY tipp_points
	ORDER BY tipp_points DESC LIMIT 3";
if (!$result = $db->sql_query($sql))
{
	message_die(GENERAL_ERROR, 'Could not query formel_tipps', '', __LINE__, __FILE__, $sql);
}
Das funktioniert bestens. Diese drei Werte brauche ich in als je eine Variable. Aktuell zeige ich die Werte so an:

Code: Alles auswählen

while($row = mysql_fetch_object($result))
{
	$anz_place = $row->anzahl;

	echo $anz_place;
	echo "<br>";
}
Die Variable $anz_place möchte ich nun hochzählen lassen zu $anz_place_1, $anz_place_2 bzw. $anz_place_3. Allerdings will sich mir die Lösung hierfür nicht erschließen, trotz Google und PHP Handbuch. :-?

Daher mein Frage und Bitte an die Profis: Wie muss das ganze aussehen?

Bye

Re: Variablennamen hochzählen?

Verfasst: 07.08.2010 09:07
von Unimatrix_0

Re: Variablennamen hochzählen?

Verfasst: 07.08.2010 09:11
von Dungeonwatcher
Moin Unimatrix_0! 8)

Genau das ist das was mir nicht in den Kopf will. :-?

Bye

Re: Variablennamen hochzählen?

Verfasst: 07.08.2010 10:12
von gn#36
Du weißt doch wie viele Werte du ausliest. Also einfach statt der while Schleife drei mal von Hand ausführen und in die Variable füllen. Ist vielleicht nicht elegant aber geht schnell.

Re: Variablennamen hochzählen?

Verfasst: 08.08.2010 14:17
von Dungeonwatcher
Hi! 8)

Ich hab's nun hinbekommen. Ein Tipp im NewsNet mit dem Stichwort "Variable Variablen" und ein Beispielscript war die Lösung. Das ganze sieht nun so aus:

Code: Alles auswählen

		$i = 1;
		while($row = mysql_fetch_object($result))
		{
			$var_name = "anz_place_" . $i;
			$$var_name = $row->anzahl;
			$i++;
		}
Eigentlich gar nicht so kompliziert wenn man es weiß. :)
Warum sind Dokus eigentlich immer so unlogisch und weltfremd geschrieben? :(

Bye

Re: Variablennamen hochzählen?

Verfasst: 08.08.2010 15:43
von Pyramide
Genau für solche Zwecke gibt es Arrays. Hier variable Variablen zu verwenden, macht die Sache nicht nur unnötig kompliziert, sondern auch unsicherer und langsamer*.

* Wobei das "langsamer" in der Praxis kaum ins Gewicht fällt, da Leute, die variable Variablen nutzen, auch gern zu schwachsinnigen SQL- oder Schleifenkonstruktionen tendieren, die sich dann viel stärker auf die Performance auswirken.

Re: Variablennamen hochzählen?

Verfasst: 08.08.2010 19:05
von Dungeonwatcher
Hi! 8)

Wie auch immer, ich finde es einfacher als Arrays und danke für dire Bemerkung... :wink:

Bye

Re: Variablennamen hochzählen?

Verfasst: 11.08.2010 15:44
von Dungeonwatcher
Hi! 8)

Hier mal meine Schleifenkonstruktion um Pyramide recht zu werden. :wink:

Code: Alles auswählen

// Place 1
if ($anz_place_1 == '1')
{
	$bet_race_place_1 = ($bet_race_place_1 / $anz_place_1);
}
elseif ($anz_place_1 == '2')
{
	$bet_race_place_1 = (($bet_race_place_1 + $bet_race_place_2) / $anz_place_1);
}
elseif ($anz_place_1 > '2')
{
	$bet_race_place_1 = ($bet_race_sum / $anz_place_1);
}

// Place 2
if ($anz_place_1 == '1' && $anz_place_2 == '1')
{
	$bet_race_place_2 = ($bet_race_place_2 * $anz_place_2);
}
elseif ($anz_place_1 == '1' && $anz_place_2 >= '2')
{
	$bet_race_place_2 = (($bet_race_place_2 + $bet_race_place_3) / $anz_place_2);
}

// Place 3
if ($anz_place_1 == '1' && $anz_place_2 == '1' && $anz_place_3 >= '1')
{
	$bet_race_place_3 = (((($bet_race_sum/'100') * $race_place_3)) / $anz_place_3);
}
elseif ($anz_place_1 == '2' && $anz_place_2 >= '1')
{
	$bet_race_place_3 = ($bet_race_place_3 / $anz_place_2);
}
Das ganze ist die Berechnung des Preisgeldes einer virtuellen F1 Wette.

$bet_race_sum entspricht 100% des Topfes
$bet_race_place_1 entspricht 50% des Topfes
$bet_race_place_2 entspricht 30% des Topfes
$bet_race_place_3 entspricht 20% des Topfes

Gibt es je einen ersten, zweiten und dritten Platz bekommt dieser halt 50%, 30% bzw. 20% des Topfes. Gibt es mehrere erste Plätze entfällt der Zweite bzw. auch der Dritte Platz. Der erste bekommt dann die Summe vom ersten, zweiten bzw. des dritten Platzes durch die Anzahl des ersten Platzes. Dito das ganze für den zweiten Platz bzw. dritten Platz. Im Extremfall gibt es dann nur erste Plätze die sich dann die 100% teilen.

Für alternative Umsetzungen bin ich jederzeit offen.

Bye Massi
--

Re: Variablennamen hochzählen?

Verfasst: 11.08.2010 22:16
von P7BB
Benutz Arrays, die machen an der Stelle mehr Sinn, denke ich.

Re: Variablennamen hochzählen?

Verfasst: 12.08.2010 07:41
von Dungeonwatcher
Moin! 8)
P7BB hat geschrieben:Benutz Arrays, die machen an der Stelle mehr Sinn, denke ich.
Das sagen mir mittlerweile viele, nur keiner hat mir bisher erklärt warum? Abgesehen davon, das ich diese in diesem Zusammenhang noch nicht verstanden habe, welchen echten Vorteil bringt mir das?

Bye