PHP键=>;值数组查找上一个和下一个条目

PHP键=>;值数组查找上一个和下一个条目,php,arrays,search,Php,Arrays,Search,我有一个key=>value的数组,我想接收给定数组键的上一个和下一个条目 示例: $array = array( 'one' => 'first', 'two' => 'second', 'three' => '3rd', 'four' => '4th' ) 当我有给定的键'two'时,我想接收条目$array['one']和$array['three'],每个解决方案是否都有好的无?你可以尝试用一个SPL cachingie

我有一个key=>value的数组,我想接收给定数组键的上一个和下一个条目

示例:

$array = array(
    'one'   => 'first',
    'two'   => 'second',
    'three' => '3rd',
    'four'  => '4th'
)

当我有给定的键
'two'
时,我想接收条目
$array['one']
$array['three']
,每个解决方案是否都有好的无?

你可以尝试用一个SPL cachingierator实现一些东西。

你正在寻找的两个函数是和。本机PHP函数,用于执行您想要的操作:

$previousPage = prev($array);
$nextPage = next($array);

这些函数移动内部指针,例如,如果您在$array['two']上并使用prev($array),那么您现在在$array['one']上。我的意思是,如果需要得到1和3,那么需要调用next()两次。

您可以定义自己的类来处理基本数组操作:

以下是adityabhai[at]gmail网站[Aditya Bhatt]09-May-2008 12:14在php.net上发布的一个示例

<?php
class Steps {

    private $all;
    private $count;
    private $curr;

    public function __construct () {

      $this->count = 0;

    }

    public function add ($step) {

      $this->count++;
      $this->all[$this->count] = $step;

    }

    public function setCurrent ($step) {

      reset($this->all);
      for ($i=1; $i<=$this->count; $i++) {
        if ($this->all[$i]==$step) break;
        next($this->all);
      }
      $this->curr = current($this->all);

    }

    public function getCurrent () {

      return $this->curr;

    }

    public function getNext () {

      self::setCurrent($this->curr);
      return next($this->all);

    }

    public function getPrev () {

      self::setCurrent($this->curr);
      return prev($this->all);

    }

  }
?>

Demo Example:

<?php
   $steps = new Steps();
   $steps->add('1');
   $steps->add('2');
   $steps->add('3');
   $steps->add('4');
   $steps->add('5');
   $steps->add('6');
   $steps->setCurrent('4');
   echo $steps->getCurrent()."<br />";
   echo $steps->getNext()."<br />";
   echo $steps->getPrev()."<br />";
   $steps->setCurrent('2');
   echo $steps->getCurrent()."<br />";
   echo $steps->getNext()."<br />";
   echo $steps->getPrev()."<br />";
?>

演示示例:
$array=array(
“一个”=>“第一个”,
“两个”=>“第二个”,
“三个”=>“第三个”,
“四”=>“四”
);
函数getPrevNext($haystack,$needle){
$prev=$next=null;
$aKeys=数组_键($haystack);
$k=数组搜索($needle,$aKeys);
如果($k!==false){
如果($k>0)
$prev=array($aKeys[$k-1]=>$haystack[$aKeys[$k-1]]);
如果($k<计数($aKeys)-1)
$next=array($aKeys[$k+1]=>$haystack[$aKeys[$k+1]]);
}
返回数组($prev,$next);
}
var_dump(getPrevNext($array,'two');
var_dump(getPrevNext($array,'one');
变量转储(getPrevNext($array,'four');

如果搜索“一”,您希望得到什么?我有$数组,我想获得键“二”数组的上一个和下一个条目。如果文本中有特殊字符,我必须搜索上一个和下一个条目。酷:)没有foreach()的解决方案!我怎样才能“在$array['two']”上?这也是一个解决方案,每个都有
:-(
$array = array(
    'one'   => 'first',
    'two'   => 'second',
    'three' => '3rd',
    'four'  => '4th'
);


function getPrevNext($haystack,$needle) {
    $prev = $next = null;

    $aKeys = array_keys($haystack);
    $k = array_search($needle,$aKeys);
    if ($k !== false) {
        if ($k > 0)
            $prev = array($aKeys[$k-1] => $haystack[$aKeys[$k-1]]);
        if ($k < count($aKeys)-1)
            $next = array($aKeys[$k+1] => $haystack[$aKeys[$k+1]]);
    }
    return array($prev,$next);
}

var_dump(getPrevNext($array,'two'));

var_dump(getPrevNext($array,'one'));

var_dump(getPrevNext($array,'four'));