php数组next()和prev()

时间:2010-04-07 15:38:22

标签: php arrays codeigniter

我有一个看起来像这样的数组,

    Array
(
    [0] => 849710414
    [1] => 849710726
    [2] => 849710744
    [3] => 849712728
    [4] => 849713005
    [5] => 849713439
    [6] => 849714856
    [7] => 849714924
    [8] => 849716371
    [9] => 849716441
    [10] => 849717118
    [11] => 849719043
    [12] => 849719187
    [13] => 849722865
    [14] => 849723412
    [15] => 849723777
    [16] => 849725052
    [17] => 849726294
    [18] => 849726457
    [19] => 849726902
    [20] => 849728239
    [21] => 849728372
    [22] => 849728449
    [23] => 849730353
    [24] => 849733625
)

这些ID是我需要添加到URL以在网站中导航的ID,ID是从用户搜索返回的结果,然后用户点击搜索结果并可以选择转到下一个搜索结果是看前一个,现在我可以通过

来做到这一点
<a href="<?=next($array);?>">Next</a>
<a href="<?=prev($array);?>">Prev</a>

我怎么似乎都没有意识到我正在考虑的当前结果ID是什么,以及下一个和之前的工作?现在有人能解决这个问题吗?

5 个答案:

答案 0 :(得分:9)

next()prev()在脚本处理时处理数组的内部指针。

您需要做的是找出您当前正在查看的数组的索引(array_search()),然后添加1以获取下一个值,并减去1以获取之前的值。

// Find the index of the current item
$current_index = array_search($current_id, $array);

// Find the index of the next/prev items
$next = $current_index + 1;
$prev = $current_index - 1;

您的HTML:

<?php if ($prev > 0): ?>
    <a href="<?= $array[$prev] ?>">Previous</a>
<?php endif; ?>

<?php if ($next < count($array)): ?>
    <a href="<?= $array[$next] ?>">Next</a>
<?php endif; ?>

答案 1 :(得分:4)

如果数组键不是连续的,则使用$ current_index + 1和$ current_index - 1可能不起作用。这是一种更好的方法来查找相对于当前数组键的数组键。

function array_key_relative($array, $current_key, $offset = 1, $strict = true) {
  // create key map
  $keys = array_keys($array);
  // find current key
  $current_key_index = array_search($current_key, $keys, $strict);
  // return desired offset, if in array, or false if not
  if(isset($keys[$current_key_index + $offset])) {
    return $keys[$current_key_index + $offset];
  }
  return false;
}

我觉得这个功能对前一个和下一个按钮非常有用,并且经常使用它。

当然,现在您需要将搜索字词保留在网址中,这样您就可以在每次加载页面时执行搜索。像这样:

http://www.example.com/search/?s=some+search&row=4

...然后执行搜索并显示结果编号4.您的上一个和下一个按钮将引用行号并执行以下操作:

$previous_key = array_key_relative($search_results, $current_row, -1);
$next_key = array_key_relative($search_results, $current_row, 1);

应该这样做。

答案 2 :(得分:1)

PHP数组包含一个内部指针。该指针跟踪当前元素。创建新数组时,指针指向数组中的第一个元素。调用next()prev()向前和向后移动指针。我怀疑你想做的是:

<a href="<?php echo $array[$id + 1]; ?>">Next</a>
<a href="<?php echo $array[$id - 1]; ?>">Prev</a>

此示例已简化,因为它不会检查$id$id - 1$id + 1是否有效。

看看php docs for current()。它解释了数组指针的工作原理。

答案 3 :(得分:0)

我猜你想把指针放在某个位置。没有开箱即用的功能,您必须手动执行以下操作:

function set (&$array,$key) { 
    reset ($array); 
    while (key($array) !== $key) { 
        if (next($array) === false) throw new Exception('Invalid key'); 
    } 
} 

$array = array(4=>'a',2=>'b',0=>'c',9=>'d'); 
set($array,2); 
echo current($array);
echo next($array)

答案 4 :(得分:0)

如果你调用next()然后调用prev(),那么你就回到了你开始的地方。这些函数在数组中移动一个内部指针,用于确定调用current()返回哪个元素。

您可能想要做的是保持对您所在页面的ID索引的引用,假设它存储在$ i中,然后执行以下操作:

<a href="<?=$array[$i + 1]?>">Next</a>
<a href="<?=$array[$i - 1]?>">Prev</a>

当然,使用适当的数组边界检查。