我有一个看起来像这样的数组,
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是什么,以及下一个和之前的工作?现在有人能解决这个问题吗?
答案 0 :(得分:9)
您需要做的是找出您当前正在查看的数组的索引(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>
当然,使用适当的数组边界检查。