Array nach Buchstaben überprüfen |
Startpost-Retter
Mitglied
 
Dabei seit: 24.01.2011
Beiträge: 12.246
Herkunft: Gegen Bilderklau, intern
 |
|
Array nach Buchstaben überprüfen |
 |
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
__________________ Dieser Beitrag gehörte zu einer Löschaktion von Beiträgen eines Users, er wurde diesem User überschrieben, damit der Thread nicht an Sinn verliert.
|
|
12.06.2010 13:11 |
|
|
Julia712

Mitglied
 

Dabei seit: 28.11.2006
Beiträge: 2.262
 |
|
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
|
|
12.06.2010 14:10 |
|
|
Oli
Server-Administrator
    
Dabei seit: 13.06.2010
Beiträge: 1.540
 |
|
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
|
|
13.06.2010 18:42 |
|
|
Kuhmuhphu

Probiers mal mit Gemütlichkeit
 
Dabei seit: 20.12.2009
Beiträge: 3.168
Herkunft: Hinter den 7 Bergen..
 |
|
Jetzt mal ne blöde frage..
kann man da auch bestimmten ab wann zum nächsten Buchstaben gewechselt werden soll?
|
|
14.06.2010 11:06 |
|
|
Stelo

de drecksche Assl
 

Dabei seit: 28.04.2005
Beiträge: 1.628
 |
|
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.
__________________
"Es gibt keine Romanhelden mehr,
weil es keine Individualisten mehr gibt,
weil die Individualität verlorengegangen,
weil der Mensch einsam, jeder Mensch gleich einsam,
ohne Recht auf individuelle Einsamkeit ist und
eine namen- und heldenlose einsame Masse bildet."
Günter Grass

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stelo: 16.06.2010 18:21.
|
|
16.06.2010 17:38 |
|
|
Oli
Server-Administrator
    
Dabei seit: 13.06.2010
Beiträge: 1.540
 |
|
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.
|
|
16.06.2010 18:18 |
|
|
Stelo

de drecksche Assl
 

Dabei seit: 28.04.2005
Beiträge: 1.628
 |
|
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
__________________
"Es gibt keine Romanhelden mehr,
weil es keine Individualisten mehr gibt,
weil die Individualität verlorengegangen,
weil der Mensch einsam, jeder Mensch gleich einsam,
ohne Recht auf individuelle Einsamkeit ist und
eine namen- und heldenlose einsame Masse bildet."
Günter Grass

|
|
16.06.2010 18:27 |
|
|
Oli
Server-Administrator
    
Dabei seit: 13.06.2010
Beiträge: 1.540
 |
|
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.
|
|
16.06.2010 18:36 |
|
|
|
Impressum
|