Php 从单个数组进行简单分页

Php 从单个数组进行简单分页,php,arrays,Php,Arrays,我正在尝试从单个数组进行分页 $input = Array ( [0] => 'A', [1] => 'B', [2] => 'C' ... ) 示例$show_/_页面=2 在第1页 paging($input,$page, $show_per_page); $output = Array( [0]=>'A

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

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

        )
示例$show_/_页面=2

在第1页

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

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

$output = Array(                
                [2]=>'B'
        );
我知道array\u slice,但它不适合这种情况。有人知道怎么做吗?

是的,array\u 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);
    }
}
是的,数组_片正是您想要的。这是最有效的方法。这是你需要的

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);
    }
}

Steven的答案是可行的,但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);
}

Steven的答案是可行的,但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);
}
试试这个,

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);
        }
    }
试试这个,

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);
        }
    }
如果您使用PHP5.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
    )
)
如果您使用PHP5.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
    )
)

我会使用array\u chunk:array\u chunk将效率低下。数组块可以很好地工作。我会使用数组块:数组块效率会很低。array_slice可以正常工作。我认为在使用基于1的页面编号时,需要使用-$pageNumber。否则,您将以-1开头。我认为在使用基于1的页码时,您需要使用-$pageNumber。否则,您将从-1开始。