phpbar.de logo

Mailinglisten-Archive

[php] Array internen Zeiger setzen

[php] Array internen Zeiger setzen

Niels Jäckel niels.jaeckel at silice.de
Mon Sep 17 11:32:20 CEST 2007


Hallo Alex,

> Ok, also die next Variante funktioniert ...
> Versuche ich allerdings das Ganze von hinten aufzurollen ... klappt dies 
> leider nicht ...
> Ich kann meinen (Denk)fehler leider nicht erkennen ...
> 
> Funktioniert:
> ---
> foreach ($mein_array as $value) {
>     next($mein_array);
>     if($value == $_GET["pos"]) {
>         $mode=current($mein_array);
>         break;
>     }
>    
> }
> 
> Funktioniert nicht:
> ---
> end($mein_array); #zum Ende springen
> foreach ($mein_array as $value) { #Array durchlaufen
>     prev($mein_array);
>     if($value == $_GET["pos"]) {
>         $mode=current($mein_array);
>         break;
>     }
> }

Du arbeitest unbewusst auf zwei verschiedenen Arrays [1]. foreach() 
arbeitet immer auf einer KOPIE des Arrays. Außerdem wird der Arrayzeiger 
immer zurückgesetzt vorher. D.h. dein end() ist unwirksam.

Weiterhin ist dein Code mehr als Doppelt. Zum einen iterierst du über 
das Array mit foreach() und gehst zum andern intern vorwärts oder 
rückwärts. Eins von beiden reicht. Also entweder nur foreach oder per 
while-Schleife das Array mit next() bzw. prev() durchgehen.

Aber letztendlich holst du dir doch nur das x. Element aus dem Array. 
Sind die Indizes nicht korrekt durchnummeriert oder assoziativ, weswegen 
du nicht gleich explizit zugreifen kannst ($mein_array[3]) ?

Falls dem so sei kannst du wegweisend folgendes Konstrukt verwenden:

    // bis zum 3. Element gehen
    for ($i = 0; $i < 2; $i++) { prev($mein_array); }

    // element nehmen
    $mode = current($mein_array);


Grüße,
Niels

1: http://www.php.net/manual/de/control-structures.foreach.php

php::bar PHP Wiki   -   Listenarchive