Startpost-Retter
Hallo GB ;D
Das Problem ist jetzt etwas kompliziert :/
Ich habe die Ausbildung eines Pferdes in der Datenbank gespeichert. Diese kann entweder e, a, l, m oder s sein.
z.B. $ausbildung = a;
Desweiteren habe ich ein Array, in dem diese Buchstaben ebenfalls gespeichert sind: e, a, l, m, s.
Nun möchte ich, dass die Buchstaben solange ausgeben werden, bis der Wert in der Datenbank erreicht ist.
Also ist der Wert s, soll e, a, l, m, s ausgebene werden. Ist er a, soll nur e und a ausgeben werden.
Ich dachte das wäre ja nicht sonderlich schwer mit einer einfachen While Schleife. Allerdings weiß PHP ja nicht, dass in dem Fall e kleiner ist als a und a kleiner ist als l.
Müsste ich also alle Buchstaben in Zahlen umwandeln oder würde das auch einfacher gehen? Bin etwas ratlos derzeit.
Vielen Dank schon mal,
Nella
Julia712
Hey,
macht doch einfach per Switch-Abfrage 'ne Zuweisung für 'ne Integer-Variable. Wenn der DB-Wert S ist, setzt du die Variable auf 4, bei M auf 3 usw.
Dann kannst du dir einfach per Schleife das Array ausgeben lassen...
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
|
switch ($row->Ausbildung) {
case "E":
$ausbildung = 0;
break;
case "A":
$ausbildung = 1;
break;
case "L":
$ausbildung = 2;
break;
case "M":
$ausbildung = 3;
break;
case "S":
$ausbildung = 4;
break;
}
$i = 0;
while $i <= $ausbildung
{
echo $ausbildungsarray[$i];
} |
|
Müsste eigentlich funktionieren
Liebe Grüße
Julia
Oli
Hi,
Wenn ich das richtig verstanden habe, würde auch eine
foreach-Schleife funktionieren.
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
<?php
$ausbildungen=array("e","a","l","m","s"); //reihenfolge beachten
foreach($ausbildungen as $ausbildung){
echo $ausbildung;
if($ausbildung==$row->Ausbildung) break; //schleife beenden, da $row->Ausbildung erreicht
}
?>
|
|
Diese Variante würde das Array solange durchlaufen, bis $row->Ausbildung (oder das Ende des Arrays) erreicht ist.
LG,
Oli
Kuhmuhphu
Jetzt mal ne blöde frage..
kann man da auch bestimmten ab wann zum nächsten Buchstaben gewechselt werden soll?
Stelo
Ich hätte das ja so gemacht:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
|
$ausbildungen=array("e","a","l","m","s");
$buchstabe = $row['ausbildung'];
$i=0;
while ($buchstabe != $ausbildungen[i]) {
echo $ausbildungen[i];
$i++;
}
echo $buchstabe; |
|
Bitte entschuldigt, wenn die Syntax nicht ganz richtig ist, hab lange kein PHP mehr intensiv genutzt.
Oli
Zitat: |
Original von Stelo
Ich hätte das ja so gemacht:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
$ausbildungen=array("e","a","l","m","s");
$buchstabe = $row['ausbildung'];
//fängt bei PHP ein Array bei 0 oder 1 an, ich bin mir gerade nicht sicher, ich nehme mal die 1
$i=1
while ($buchstabe != $ausbildungen[i]) {
echo $ausbildungen[i];
$i++;
}
echo $buchstabe; |
|
Bitte entschuldigt, wenn die Syntax nicht ganz richtig ist, hab lange kein PHP mehr intensiv genutzt. |
Die Syntax ist ganz gut, lediglich bei $i=1 fehlt das Semikolon ( ; ), außerdem müsste das 0 sein

. Ein Array fängt bei 0 an, wie in (ich glaube) jeder Programmiersprache.
Das würde so natürlich funktionieren, hat aber ein theoretisches Sicherheitsproblem. Wenn in der Datenbank ein Buchstabe steht - warum auch immer - der nicht im Array ist, läuft die Schleife ewig und im schlimmsten Fall (bei schlechter Konfiguration) kann man damit den Webserver zum Ausfall bringen.
Stelo
Zitat: |
Original von Oli
Zitat: |
Original von Stelo
Ich hätte das ja so gemacht:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
$ausbildungen=array("e","a","l","m","s");
$buchstabe = $row['ausbildung'];
//fängt bei PHP ein Array bei 0 oder 1 an, ich bin mir gerade nicht sicher, ich nehme mal die 1
$i=1
while ($buchstabe != $ausbildungen[i]) {
echo $ausbildungen[i];
$i++;
}
echo $buchstabe; |
|
Bitte entschuldigt, wenn die Syntax nicht ganz richtig ist, hab lange kein PHP mehr intensiv genutzt. |
Die Syntax ist ganz gut, lediglich bei $i=1 fehlt das Semikolon ( ; ), außerdem müsste das 0 sein
. Ein Array fängt bei 0 an, wie in (ich glaube) jeder Programmiersprache.
Das würde so natürlich funktionieren, hat aber ein theoretisches Sicherheitsproblem. Wenn in der Datenbank ein Buchstabe steht - warum auch immer - der nicht im Array ist, läuft die Schleife ewig und im schlimmsten Fall (bei schlechter Konfiguration) kann man damit den Webserver zum Ausfall bringen. |
Danke für den Hinweis. Ich habe es mal berichtigt.
Aber dein Einwand ist durchaus berechtigt. Also auch keine optimale Lösung.
Aber da habe ich doch gerade das gefunden:
array_key_exists
Oli
Zitat: |
Original von Stelo
Danke für den Hinweis. Ich habe es mal berichtigt.
Aber dein Einwand ist durchaus berechtigt. Also auch keine optimale Lösung.
Aber da habe ich doch gerade das gefunden: array_key_exists |
Ich würde einfach die maximale Arraygröße mit einbauen:
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
$ausbildungen=array("e","a","l","m","s");
$buchstabe = $row['ausbildung'];
$i=0;
$groesse=count($ausbildungen); //anzahl der arrayinhalte
while ($buchstabe != $ausbildungen[i]) {
echo $ausbildungen[i];
if($i++==$groesse) break; //vergrössern und, falls=$groesse (letztes), schleife verlassen
}
echo $buchstabe; |
|
Allerdings tut mein Code von weiter oben genau das selbe, nur als for-each:
php: |
1:
2:
3:
4:
5:
|
$ausbildungen=array("e","a","l","m","s");
foreach($ausbildungen as $ausbildung){
echo $ausbildung;
if($ausbildung==$row->Ausbildung) break; //schleife beenden, da $row->Ausbildung erreicht
} |
|
Foreach hat noch den Vorteil, dass es in jedem Fall zu Ende ist, wenn das Array keinen Inhalt mehr hat.