我有一个包含枚举数字的数组,例如:
$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个大foreach等等)。也许你有个主意。
我的第一个想法是:
foreach ($pageNumbers as $page) {
if($page < $currentPage+3 && $page > $currentPage-3) {
array_push(...);
}
}
这将适用于$currentPage = 6
,但是如果使用$currentPage = 1
,它将仅返回1,2,3
。
答案 0 :(得分:2)
使用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