单个数组的简单分页

时间:2012-12-07 06:52:49

标签: php arrays

我正在尝试从单个数组进行分页

$input = Array
        (
            [0] => 'A',
            [1] => 'B',
            [2] => 'C'
            ...

        )

示例$show_per_page=2;

第1页

paging($input,$page, $show_per_page);

$output = Array(
                [0]=>'A',
                [1]=>'B'
        );
第2页

$output = Array(                
                [2]=>'B'
        );

我知道array_slice,但这种情况不对。有人知道怎么做吗?

4 个答案:

答案 0 :(得分:5)

是的,array_slice正是您想要的。这是最有效的方法。这就是你需要的。

function get_page(array $input, $pageNum, $perPage) {
    $start = ($pageNum-1) * $perPage;
    $end = $start + $perPage;
    $count = count($input);

    // Conditionally return results
    if ($start < 0 || $count <= $start) {
        // Page is out of range
        return array(); 
    } else if ($count <= $end) {
        // Partially-filled page
        return array_slice($input, $start);
    } else {
        // Full page 
        return array_slice($input, $start, $end - $start);
    }
}

答案 1 :(得分:3)

史蒂文的答案可行,但if/elseif/else是不必要的(至少在PHP 5.3及以上版本中 - 可能在旧版本中需要):

/**
 * @param array $array Array to be paged
 * @param int $pageNumber One-based pageNumber to return
 * @param int $pageSize Desired page size
 * @return array
 */
public function getPage($array, $pageNumber, $pageSize)
{
    $start = --$pageNumber * $pageSize;
    return array_slice($array, $start, $pageSize);
}

答案 2 :(得分:0)

试试这个,

function paging($data, $limit, $page){
        $jmlData = count($data);
        if(!empty($limit)){
            $totalHalaman = ceil($jmlData/$limit);  
        }else{
            $totalHalaman = 1;
        }

        if(!empty($page) && !empty($limit)){
            $start = ($page - 1) * $limit;
        }else{
            $start = 0;
        }

        $end = $start + $limit;

        if($start < 0 || $totalHalaman < $page){
            return array();
        } elseif($start == 0 && $limit == 0){
            return array_slice($data, $totalHalaman);
        }else{
            return array_slice($data, $start, $end - $start);
        }
    }

答案 3 :(得分:-1)

如果您使用PHP 5.x

$pages = array_chunk($goodfiles, 5);

结果:

Array
(
[0] => Array
    (
        [0] => About_RFSB06WEB.flv
        [1] => Kids_Excited.flv
        [2] => Kids_Start_Run.flv
        [3] => Kids_start.jpg
        [4] => Kids_start_sm.jpg
    )

[1] => Array
    (
        [0] => image01.jpg
        [1] => image02.jpg
        [2] => image03.jpg
        [3] => image04.jpg
        [4] => image05.jpg        
    )

[2] => Array
    (
        [0] => image06.jpg
        [1] => image07.jpg
        [2] => image08.jpg
    )
)