如何获取php数组的上一个和下一个键?

如何获取php数组的上一个和下一个键?,php,arrays,Php,Arrays,下面是我想要创建的数组,如果条件类型为 if (($variable >=2) && ($variable <3)) { echo '10'; } if (($variable >=2) && ($variable <3)) { echo '10'; } 不能在foreach上使用next()和prev(),因为它与数组的副本一起工作,并且没有一个很好的顺序索引0,1,2,3。。。因此,您不能进行简单的键加减运算,但如果您自己管理光标位

下面是我想要创建的数组,如果条件类型为

if (($variable >=2) && ($variable <3)) { echo '10'; }
if (($variable >=2) && ($variable <3)) { echo '10'; }
不能在foreach上使用next()和prev(),因为它与数组的副本一起工作,并且没有一个很好的顺序索引0,1,2,3。。。因此,您不能进行简单的键加减运算,但如果您自己管理光标位置,就可以进行加减运算

使用do/while循环,您可以手动使用next()前进,然后向后前进,同时考虑到如果后退或前进太远,会打断数组光标

$array = array( 2=>10, 3=>14, 4=>15, 5=>16, 8=>17, 14=>18 );

$value = current( $array );

do
{

  echo 'current-key: ' . key( $array ) . PHP_EOL;
  echo 'current-value: ' . $value . PHP_EOL;

  // PREV
  if( ( $prev = prev( $array ) ) === false )
  {
    echo 'prev-key: N/A' . PHP_EOL;
    echo 'prev-value: N/A' . PHP_EOL;
    reset( $array );  // Restore cursor
  }
  else
  {
    echo 'prev-key: ' . key( $array ) . PHP_EOL;
    echo 'prev-value: ' . $prev . PHP_EOL;
    next( $array ); // Restore cursor
  }

  // NEXT
  if( ( $next = next( $array ) ) === false )
  {
    echo 'next-key: N/A' . PHP_EOL;
    echo 'next-value: N/A' . PHP_EOL;
    end( $array ); // Restore cursor
  }
  else
  {
    echo 'next-key: ' . key( $array ) . PHP_EOL;
    echo 'next-value: ' . $next . PHP_EOL;
    prev( $array ); // Restore cursor
  }

  echo PHP_EOL;

} while( $value = next( $array ) );
这将打印如下所示的块

// current-key: 2
// current-value: 10
// prev-key: N/A
// prev-value: N/A
// next-key: 3
// next-value: 14
//
// current-key: 3
// current-value: 14
// prev-key: 2
// prev-value: 10
// next-key: 4
// next-value: 15
//
// current-key: 4
// current-value: 15
// prev-key: 3
// prev-value: 14
// next-key: 5
// next-value: 16

也许我错了,但从问题的第一部分开始,我认为您不需要获取数组的上一个或下一个键/项

我想在

if (($variable >=2) && ($variable <3)) { echo '10'; }
if (($variable >=2) && ($variable <3)) { echo '10'; }
该策略工作良好,易于阅读和理解

但是,如果编写代码时不知道范围列表(以及它们的值)(例如,它是从数据库加载的),则该方法不起作用

在这种情况下,可以使用一个简单的
foreach
循环来迭代列表,以确定正确的范围

function getValue($input)
{
    $limits = array(
        2 => 10,
        3 => 14,
        4 => 15,
        5 => 16,
        8 => 17,
        14 => 18,
        51 => 19,
        94 => 20,
    );

    foreach (array_reverse($limits, TRUE) as $key => $value) {
        if ($key <= $input) {
            return $value;
        }
    }

    return 'N/A';
}


echo(getValue(2));              # 10
echo(getValue(6));              # 16
echo(getValue(25));             # 18
echo(getValue(51));             # 19
echo(getValue(100));            # 20
函数getValue($input)
{
$limits=数组(
2 => 10,
3 => 14,
4 => 15,
5 => 16,
8 => 17,
14 => 18,
51 => 19,
94 => 20,
);
foreach(数组_reverse($limits,TRUE)为$key=>$value){

如果($key)您可以在数组值中存储一个带有prev和next的节点,如
数组(key=>array(value,prev,next));
可能重复的@muasif80 an,您可以给我举个例子,以便更好地理解?可能重复的