【问题标题】:php - Return array based on range keyphp - 基于范围键返回数组
【发布时间】:2018-11-05 16:52:10
【问题描述】:

我有一个包含枚举数字的数组,例如:

$pageNumbers = array(1,2,3,4,5,6,7,8,9,10);

现在我有一个活动页码 $currentPage 并希望基于此,前后 2 个元素 - 总数为 5。

$currentPage = 2:

返回:array(1,2,3,4,5)

$currentPage = 6

返回:array(4,5,6,7,8)

$currentPage = 10

返回:array(6,7,8,9,10)

不幸的是,我没有想出一个优雅而简单的方法来解决这个问题(2x while,1 big foreach 等等)。也许你有一个想法。

我的第一个想法是:

foreach ($pageNumbers as $page) {
        if($page < $currentPage+3 && $page > $currentPage-3) {
            array_push(...);
        }
    }

这适用于$currentPage = 6,但如果是$currentPage = 1,它只会返回1,2,3

【问题讨论】:

  • 尽管如此,请展示你所拥有的。正在工作吗?出了什么问题?
  • array_searcharray_splice 可以正常工作。
  • 你有没有考虑找到当前页面的索引,然后修剪两边的数组?
  • 谢谢@Jeff,我添加了我的试用版。
  • range($start,$end) 然后是一点点数学运算,并检查第一页和最后一页,

标签: php arrays function


【解决方案1】:

使用 array_slice 并切出你需要的数组部分。

我使用 if 来查看对数组进行切片的位置。

if($currentPage < 3){
    $arr = array_slice($pageNumbers,0,5);
}elseif($currentPage > count($pageNumbers)-2){
    $arr = array_slice($pageNumbers,-5,5);
}else{
    $arr = array_slice($pageNumbers,$currentPage-3,5);
}

请参阅下面的工作示例。
https://3v4l.org/fpOFQ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多