簡體   English   中英

PHP:如果為last / first,則使用循環獲取數組的next / prev元素

[英]PHP: Get next/prev element of an array with loop if last/first

我沒有將導航箭頭添加到我的投資組合中。 我想根據當前ID獲取下一個和上一個ID。 問題是當$current_id是數組的最后一個數組時,我不知道如何轉到第一個數組來創建一種循環。 同樣,如果$current_id是第一個元素,則如何將最后一個元素作為prev? 我被困住了,能請你幫我嗎?

這是我的代碼:

<?php 

    $current_id = "10";

    $array = array(
        "1" => "aa",
        "2" => "bb",
        "3" => "cc",
        "4" => "dd",
        "5" => "ee",
        "6" => "ff",
        "7" => "gg",
        "8" => "hh",
        "9" => "ii",
        "10" => "jj",
    );


    $current_index = array_search($current_id, $array);

    $next = $current_index + 1;
    $prev = $current_index - 1;

?>

您可以對下一個值使用模%

$number_of_elements = count($array);
$next = ($current_index + 1) % $number_of_elements;

而prev值為if,因為模不喜歡負數

$prev = $current_index - 1
if ($prev < 0){
    $prev = $number_of_elements - 1;
}

使用這種方式取模:

$current_id = 9;

$array = array(
    "aa",
    "bb",
    "cc",
    "dd",
    "ee",
    "ff",
    "gg",
    "hh",
    "ii",
     "jj",
);

$next = ($current_id+($count=count($array))+1)%$count;
$previous = ($current_id+$count-1)%$count;

print("$previous $next");

您可以使用reset()end()函數將數組指針移動到數組的開頭和結尾。 因此,在處理數組之前,您可以執行以下操作:

end($array);
$end = key($array);

接着:

reset ($array);
while (current ($array)) {
    $current_index = key($array);
    $current_value = current($array);
    if ($current_index == $end) 
        reset($array);
    else
        next($array);
}

或者,構建某種鏈表,其中數組的每個元素都將具有指向下一個元素的指針/引用。

如果您有page的最后一個ID,則可以實現。

嘗試一些

$last=count($array);
$next = $current_index + 1;
$next=$next<0?$last:$next;
$prev = $current_index - 1;
$prev =$prev==$last?1:$prev

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM