Вот решение:
$arr = array(1,2,3,4,5);
foreach ($arr as $foo) {
if (empty($isrewind)) {
reset($arr);
$isrewind = true;
}
echo "node: $foo\n";
$copy = $arr; // make a copy of the array
$next = next($copy);
echo "next: $next\n";
$copy = $arr; // make a copy of the array
$prev = prev($copy);
echo "prev: $prev\n";
next($arr); // don't forget to advance the pointer on the original array
}
Я продемонстрировал бит prev
только для примера.Вы можете легко сделать это без prev()
, сохранив элемент в конце каждой итерации.
Бит if empty
сбрасывает указатель массива в начало, потому что foreach
передвигает указатель один раз, когдаделает копию массива.
Приведенный выше пример дает:
node: 1
next: 2
prev:
node: 2
next: 3
prev: 1
node: 3
next: 4
prev: 2
node: 4
next: 5
prev: 3
node: 5
next:
prev: 4
Если вам нужно сделать что-то подобное, то может быть лучшим способом, простоизменив структуру данных (трудно сказать без кода).