【问题标题】:PHP foreach print array with previous and next elementPHP foreach 打印数组与前一个和下一个元素
【发布时间】:2012-01-05 12:46:00
【问题描述】:

我有一个数组 $data,我想用 foreach 打印它($data as $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

【问题讨论】:

  • 你尝试做什么?请贴出试过的代码。我们将帮助完成它
  • 向我们展示您目前拥有的代码。
  • 你知道如何使用数组索引吗?
  • 另外,请解释为什么在第一项中,前一项是指数组中的最后一项? (不应该是空的吗?)最后一项也有同样的问题
  • 听起来像是一道作业题。

标签: php arrays foreach next


【解决方案1】:
<?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

【讨论】:

    【解决方案2】:

    你可以去:

    $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";
    }
    

    【讨论】:

    • 此解决方案假定数组具有数字索引且没有孔。
    【解决方案3】:

    同样的结果做的不同:

    <?php
    $data = range(1,16);
    $count=count($data);
    $ret='';
    
    for($i=0;$i<$count;$i++){
        $ret.=($i==0)?$data[$count-1].',':$data[$i-1].',';
        $ret.=$data[$i].',';
        $ret.=($i+1>=$count)?$data[$count-$i-1]:$data[$i+1].'<br>';
    }
    echo $ret;
    ?>
    Result:
    16,1,2
    1,2,3
    2,3,4
    3,4,5
    4,5,6
    5,6,7
    6,7,8
    7,8,9
    8,9,10
    9,10,11
    10,11,12
    11,12,13
    12,13,14
    13,14,15
    14,15,16
    15,16,1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      相关资源
      最近更新 更多