Problem mit assoziativen Arrays in PHP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ansprechen
array
assoziativen array
assoziativen zugriff
auslese
beispiel
code
durchlauf
funktionieren
idee
index
inhalt
interpreter
jemand
offset
restwert
schleife
schritt
testen
zugreifen
-
Hallo,
ich habe ein assoziatives Array, dessen Länge und Inhalt variiert. Deswegen habe ich das folgendermaßen aufgebaut:
array(16) { ["ol_x"]=> int(1) ["ol_y"]=> int(3) ["om_x"]=> int(2) ["om_y"]=> int(3) ["or_x"]=> int(3) ["or_y"]=> int(3) ["ml_x"]=> int(1) ["ml_y"]=> int(2) ["mr_x"]=> int(3) ["mr_y"]=> int(2) ["ul_x"]=> int(1) ["ul_y"]=> int(1) ["um_x"]=> int(2) ["um_y"]=> int(1) ["ur_x"]=> int(3) ["ur_y"]=> int(1) }
Anderes Beispiel:
array(6) { ["om_x"]=> int(0) ["om_y"]=> int(1) ["or_x"]=> int(1) ["or_y"]=> int(1) ["mr_x"]=> int(1) ["mr_y"]=> int(0) }
Wie ihr seht, variiert also der Inhalt. Nun muss ich, nachdem das Array erzeugt wurde auf den Inhalt zugreifen - immer in 2er Schritten. Das heißt in einem Durchlauf die ersten beiden, dann die nächsten beiden ... Inhalte in einer Schleife durchgehen. Ich kann aber nicht
for($i=0;$i<(count($MEINARRAY) / 2);$i++) {
if($i%2==0) {
echo $MEINARRAY[$i];
echo $MEINARRAY[$i+1];
}
}
schreiben, da diese Indexe ja nicht existieren. Hat jemand eine andere Idee, wie ich das bewerkstelligen kann? Vielen Dank. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Doch, das kannst du machen. Wenn du einen assoziativen Array erstellst kannst du diesen auch über $MEINARRAY[0], $MEINARRAY[1],... ansprechen.
-
dustboy schrieb:
Doch, das kannst du machen. Wenn du einen assoziativen Array erstellst kannst du diesen auch über $MEINARRAY[0], $MEINARRAY[1],... ansprechen.
Bei mir kommt dann aber immer Notice: Undefined offset: 0 in *** on line 125.
-
Komisch... Mein PHP-Interpreter meckert nicht^^
Aber hier noch ne andere möglichkeit:
$i = 0; foreach ($MEINARRAY as $key => $value) { $indexes[$i] = $key; $i++; } for($i=0;$i<(count($MEINARRAY) / 2);$i++) { if($i%2==0) { echo $MEINARRAY[$indexes[$i]]; echo $MEINARRAY[$indexes[$i+1]]; } }
-
Weiß jetzt nicht, ob das die optimale Lösung ist (vermutlich nicht), aber sie wird funktionieren:
//Assoziativen Zugriff indizieren $indexarray = array(); $i=0; foreach ($MEINARRAY as $key => $value) { $indexarray[$i]=$key; $i++; } //Array in 2-er Schritten auslesen for ($i=0;$i<count($MEINARRAY)-1;$i+=2) { echo $MEINARRAY[$indexarray[$i]]; echo $MEINARRAY[$indexarray[$i+1]]; } // Ausgabe, falls die Anzahl der Arrayelemente nicht durch 2 teilbar ist if (count($MEINARRAY)%2!=0) { echo "Restwert: ".$MEINARRAY[$indexarray[count($indexarray)-1]]; }
€dit: zuspät, aber mal am Rande: eure for-Schleife handelt nur den halben Array ab, weil ihr sowohl in der Schleifenbedingung als auch im Befehlsblock durch 2 teilt
Beitrag zuletzt geändert: 3.4.2010 13:57:18 von alphara -
Hallo,
habe jetzt nur zum testen nochmal
for($i=0;$i<count($MEINARRAY);$i++) { echo $MEINARRAY[$i]; }
was mir wieder mit undefined offset quittiert wird. Daher habe ich eure Lösungen benutzt. Funktioniert jetzt wunderbar, vielen Dank. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage