kostenloser Webspace werbefrei: lima-city


Problem mit assoziativen Arrays in PHP

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    y****e

    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.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Doch, das kannst du machen. Wenn du einen assoziativen Array erstellst kannst du diesen auch über $MEINARRAY[0], $MEINARRAY[1],... ansprechen.
  4. Autor dieses Themas

    y****e

    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.

  5. 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]];
      }
    }
  6. 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
  7. Autor dieses Themas

    y****e

    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.
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!