2010-04-07 132 views
1

我有一個數組,看起來像這樣,PHP數組的next()和prev()

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是結果從用戶的搜索返回,用戶然後點擊搜索結果,並可以選擇去下一個搜索結果是看前一個,現在我雖然我可以做到這一點,通過做

<a href="<?=next($array);?>">Next</a> 
<a href="<?=prev($array);?>">Prev</a> 

我怎麼似乎沒有認識到我目前看到的結果ID是什麼是ne xt和以前?現在有人可以解決這個問題嗎?

+0

HTTP是無狀態的。如何堅持搜索結果和當前顯示的請求之間的ID?請顯示更多的代碼。 – Gordon 2010-04-07 16:06:21

回答

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; ?> 
+0

這太棒了!但是一個小小的修正 - 在你的HTML中,如果($ prev> = 0)而不是簡單地> 0,你會想要。 – 2017-03-30 18:24:46

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) 
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()。它解釋了數組指針是如何工作的。

0

如果你調用next()然後prev(),你就回到了你開始的地方。這些函數移動數組中的內部指針,以確定調用current()返回哪個元素。

你可能想要做的就是保持到ID爲你的頁面的索引的引用,讓我們說這是保存在$我,然後做這樣的事情:

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

當然,用適當的數組邊界檢查。

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

我覺得這個功能對上一個和下一個按鈕非常有用,並且使用它很多。

當然,現在您需要將搜索條件保留在您的url中,以便您可以執行每頁加載的搜索。事情是這樣的:

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); 

這應該做到這一點。

+0

謝謝,那正是我正在尋找的! – 2011-09-13 10:07:40