PHP foreach print array с предыдущим и следующим элементом - PullRequest
1 голос
/ 24 ноября 2011

У меня есть массив $ data, и я хочу напечатать его с помощью foreach ($ data как $ detail). Дело в том, что я хочу внутри foreach напечатать предыдущий и следующий элемент. Примерно так:

$data = array(1,2,3,4,5,6,7,8);

// foreach result should look like this
8,1,2
1,2,3
2,3,4
3,4,5
4,5,6
5,6,7
6,7,8
7,8,1

Ответы [ 3 ]

5 голосов
/ 24 ноября 2011
<?php

$data = array(1,2,3,4,5,6,7,8);
$count = count($data);

foreach($data as $index => $number)
{
  $previous = $data[($count+$index-1) % $count]; // '$count+...' avoids problems
                                                 // with modulo on negative numbers in PHP
  $current = $number;
  $next = $data[($index+1) % $count];

  echo $previous.", ".$current.", ".$next."\n";
}

По модулю на отрицательные числа: http://mindspill.net/computing/cross-platform-notes/php/php-modulo-operator-returns-negative-numbers.html

0 голосов
/ 24 ноября 2011

Тот же результат, сделанный по-другому:

0 голосов
/ 24 ноября 2011

Вы можете пойти:

$data = array (1,2,3,4,5,6,7,8);
$count = count ($data);
foreach ($data as $key => $current)
{
  if (($key - 1) < 0)
  {
    $prev = $data[$count - 1];
  }
  else
  {
    $prev = $data[$key - 1];
  }

  if (($key + 1) > ($count - 1))
  {
    $next = $data[0];
  }
  else
  {
    $next = $data[$key + 1];
  }

echo $prev . ', ' . $current . ', ' . $next . "\n";

Или, если краткость является проблемой:

$count = count ($data);
foreach ($data as $i => $current)
{
  $prev = $data[(($i - 1) < 0) ? ($count - 1) : ($i - 1)];
  $next = $data[(($i + 1) > ($count - 1)) ? 0 : ($i + 1)];

  echo $prev . ',' . $current . ',' . $next . "\n";
}
...