【问题标题】:PHP: Get next/prev element of an array with loop if last/firstPHP:如果最后/第一,则使用循环获取数组的下一个/上一个元素
【发布时间】:2015-09-22 11:59:57
【问题描述】:

我无法在我的投资组合中添加导航箭头。我想根据当前 id 获取下一个和 prev 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;

?>

【问题讨论】:

  • 你确定你的数组键会和 1,2,3 一样吗...
  • 难道不能简单地做$array[$current_index + 1]?

标签: php arrays navigation


【解决方案1】:

您可以使用模 % 作为下一个值:

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

还有一个 if 用于 prev 值,因为模不喜欢负数

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

【讨论】:

  • 非常感谢,效果很好,正是我所期望的。
【解决方案2】:

以这种方式使用模数:

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

【讨论】:

  • @BasvanStein:它比您的解决方案更优雅,效率差异必须接近 1/infinite。无论如何,现在检查一下,你会发现它非常高效。
  • @Armarnasan :) 更好+1
【解决方案3】:

您可以使用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);
}

或者,构建某种链表,其中数组的每个元素都有指向下一个元素的指针/引用。

【讨论】:

    【解决方案4】:

    如果你有页面的最后一个 id,你可以实现它。

    试一试

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-22
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 2017-10-24
      • 2012-04-21
      相关资源
      最近更新 更多