PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : schleife um variable variablenname



Andislack
12-10-2003, 00:14
Hi!

ich habe den ganzen abend daran gesessen um variable variablennamen so hinzubekommen, dass es in meiner anwendung funktioniert.
funktioniert jetzt auch endlich :)
das problem ist jetzt, dass z.b.

if($option_1 == "Artikelnr"){
option_1 17 verschiedene werte annehmen kann. da denke ich kann man wohl nix groß in eine schleife packen, weil es ja vergleiche mit strings sind.
ich habe aber auch 17 options jedesmal mit den gleichen 17 werten und da würde ich ganz gerne ne schleife drum machen, nur blick ich nicht mehr durch, wie nun man aus <b>variablen variablennamen</b> <b>variable variable variablennamen</b> :eek: macht!?
kann mir da jemand unter die arme greifen?

hier mal ne if und elseif aus meiner anwendung:(darum sollte eine for schleife um diese 17 mal durchlaufen zu lassen und die jeweilige zahl dann option_ und feld_ zuzuordnen).


if($option_1 == "Artikelnr"){
$i = 0;
while ($i <= $counter){
$varArtikelnr_[$i] = 'feld_1_'.$i;
$Artikelnr_[$i] = $$varArtikelnr_[$i];
$i++;
}
}
elseif($option_1 == "ArtikelnrAlt"){
$i = 0;
while ($i <= $counter){
$varArtikelnrAlt_[$i] = 'feld_1_'.$i;
$ArtikelnrAlt_[$i] = $$varArtikelnrAlt_[$i];
$i++;
}
}

vielen dank und gruss andi

Gaert
12-10-2003, 14:09
Hmm.. habs mir jetzt dreimal durchgelesen, aber ich versteh immer noch nicht genau was du machen willst... vielleicht nochmal genauer erklären! ;)

Andislack
12-10-2003, 16:06
da hab ich mir fast gedacht :p
also ich möchte eine for-schleife um meine if / elseif bedingung machen, nur muss ich
die variablen

$option_1
und 'feld_1_'.$i
in der schleife hochzählen.
also so ungefähr:


for($x=1;$x<=$counter;$x++){
if($option_$x == "Artikelnr"){
$i = 0;
while ($i <= $counter){
$varArtikelnr_[$i] = 'feld_$x_'.$i;
$Artikelnr_[$i] = $$varArtikelnr_[$i];
$i++;
}
}
....usw
nur leider ist
'feld_1_'.$i ja schon zusammengesetzt aus zwei variablen.
bei option_1 sollte es wahrscheinlich durch eine definition nach der for-schleife gehen, also ungefähr so:


$varoption_[$x] = 'option_'.$x;
$option_[$x] = $$varoption_[$x];

aber hauptsächlich bekomme ich das 'feld_1_'.$i problem nicht in den griff

ich hoffe es ist jetzt klarer!?:) ansonsten nochmal fragen bitte.
gruss andi

ps: hab gerade festgestellt, dass das mit der $option_1 variable geht, so wie ich es geschrieben habe - ist mir während des schreibens der antwort aufgefallen :-) -
also gehts jetzt nur um 'feld_1_'.$i

Andislack
13-10-2003, 09:45
sodele, hab das nun auch selber hinbekommen und wie immer wars gar nicht so schwer wie eigentlich angenommen :p



for($x=1;$x<=$counter;$x++){
$varoption_[$x] = 'option_'.$x;
$option_[$x] = $$varoption_[$x];

if($option_[$x] == "Artikelnr"){
$i = 0;
while ($i <= $counter){
$varArtikelnr_[$i] = 'feld_'.$x.'_'.$i;
$Artikelnr_[$i] = $$varArtikelnr_[$i];
$i++;
}
}
elseif($option_[$x] == "ArtikelnrAlt"){
$i = 0;
while ($i <= $counter){
$varArtikelnrAlt_[$i] = 'feld_'.$x.'_'.$i;
$ArtikelnrAlt_[$i] = $$varArtikelnrAlt_[$i];
$i++;
}
}
.
.
.
.


trotzdem danke, dass du versucht hast mein problem zu verstehen :D
gruss andi

mehlvogel
13-10-2003, 11:48
Wenn $_option[$x] 17 verschieden WErte annehmen kann, wäre vielleicht eine switch .. case Anweisung übersichtlicher. (Nur so als Anmerkung ;))

offe
13-10-2003, 16:35
Hallo,

für


$i = 0;
while ($i <= $counter){
// Code
$i++;
}


gibt es


for ($i = 0; $i <= $counter; $i++; ){
// Code
}


wie auch schon benutzt

Offe

Andislack
13-10-2003, 19:20
@mehlvogel

hatte auch überlegt es mit switch case zu machen, allerdings ist meine wahl dann doch anders ausgefallen. :)

@offe

was willst du mir jetzt damit sagen?
hab while benutzt um die einzelnen schleifen untereinander abzugrenzen.


gruss andi

Andislack
16-10-2003, 01:57
neue variante meines problems:

ich habe daten in einer db und die möchte ich in variablen variablen speichern.
mein ansatz:


$select_update = "SELECT * FROM t_csv_read WHERE random = '$random_session'";
$query_update = mysql_query($select_update);

$i = 0;
while($row = mysql_fetch_object($query_update)){
$var1 = "feld_1_".$i;
$$var1 = "$row->artikelnr";

$var2 = "feld_2_".$i;
$$var2 = "$row->beschreibung_de";

$i++;

}
echo ($feld_1_2."<br>");
echo ($feld_2_2);

nur leider funktioniert der nicht.
es fehlt ja auch die zähl-bedingung für das $i aber ich komm nicht dahinter wie ich das mit dem mysql_fetch_object verbinde.
mache ich es testweise so, dann geht es:


$counter = 10;
$i = 0;

while($i<=$counter){

$var1 = "name".$i;
$$var1 = "PHP";

$var2 = "vorname".$i;
$$var2 = "hans";

$i++;

}
echo ($name10."<br>");
echo ($vorname5);


kann mir da jemand weiterhelfen?
danke im voraus gruss andi

elrond
16-10-2003, 05:46
1. möglichkeit-Du versuchst es mit einem array:

statt


$var1 = "feld_1_".$i;
$$var1 = "$row->artikelnr";

$var2 = "feld_2_".$i;
$$var2 = "$row->beschreibung_de";


versuch mal folgendes:


$arr["$row->artikelnr"]="$row->beschreibung_de";
//bei artikennr=15
echo $arr["15"];
//oder

$arr[$i]["artikelnr"]=$row->artikelnr;
$arr[$i]["beschreibung_de"]=$row->beschreibung_de;

echo $arr[2]["artikelnr"];


wenn du tatsächlich im Schleifendurchlauf variaben erzeugen willst, dann in etwa so:


eval("feld_1_".$i."=".$row->artikelnr);
eval("feld_2_".$i."=".$row->beschreibung_de);

echo $feld_1_2;

Gaert
16-10-2003, 08:00
Hallo!

Ich denke auch, dass es besser ist mit einem Mehrdimensionalen Array zu arbeiten, als wie Wild dynamisch Variablen zu generieren.

mehlvogel
16-10-2003, 12:07
und dann wäre die einfachste Schleife um die Daten in nen mehrdiemnsionalen Array zu packen:



$daten = array();
while ($bla = mysql_fetch_array()) $daten[] = $bla;


Mal eins am Rande: Warum benutzen hier fast alle mysql_fetch_objekt? Klar auf End ist es egal - aber ich finde es umständlich so ein ganzes Objekt zubehandeln anstatt nen einfaches Array...

elrond
16-10-2003, 12:18
Original geschrieben von mehlvogel

Mal eins am Rande: Warum benutzen hier fast alle mysql_fetch_objekt? Klar auf End ist es egal - aber ich finde es umständlich so ein ganzes Objekt zubehandeln anstatt nen einfaches Array...

Ich benutze das nicht explizit. ich habe seit etwa zwei jahren eine kleine objektklasse für den Datenbankzugriff.

daurch sieht's in meinem Quelletxt eigentlich immer so aus:


$sql="select * from pool p...where poolusertypid=".$ptyp;
$rs_arr=$db->select($sql);
if (!$rs_arr) {echo "keine Daten";}
else {
for ($i=0;$i<count($rs_arr);$i++) {
echo $rs_arr[$i]["poolname"]...;
}
}


meine funktion "select" liefert mir ein zweidimensionales array zurück, mit dem sich prima arbeiten läßt.

Den code der verhergehenden Posts habe ich nur kopiert und angepasst...:p