在php

时间:2015-08-13 10:10:22

标签: php arrays codeigniter pagination

如果可能,我想要一些帮助。

我有一个包含数组项列表的数组(将其视为帖子列表),如下所示:

$array = array(
            array(
                'title' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit',
                'date'  => 'Tuesday 28th July 2015',
                'img_src'   => '1130x280&text=FooBar1',
            ), 
            array(
                'title' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit',
                'date'  => 'Friday 17th July 2015',
                'img_src'   => '350x150&text=FooBar',
            ),
            array(
                'title' => 'Lorem ipsum dolor sit amet, consectetur adipisicing elit',
                'date'  => 'Thursday 9th July 2015',
                'img_src'   => '350x150&text=FooBar',
            ),
);

基本上我想做的是尝试正确地对这个数组进行分页。我的代码的基本部分是:

$per_page = 3;
$total = count($array);
        if ($total > $per_page) {

            $this->load->library('pagination');

            $config['uri_segment'] = 3;
            $config['per_page'] = $per_page;
            $config['total_rows'] = $total;
            $config['base_url'] = site_url('resources/blog/');

            $offset = $this->uri->segment(3);
            $this->pagination->initialize($config);
            $this->data['pagination'] = $this->pagination->create_links();
        } else {
            $offset = 0;
            $this->data['pagination'] = '';
        }
// this is the tricky part of my script
// where I need to slice the array properly each time 
if ($offset == 0) {
            $data['array'] = array_slice($array, 0, $per_page); 
        } else {
// this is probably where my mistake is **
            $this->data['array'] = array_slice($array, $per_page, $offset); 
        }

基本上我想做的是

  • 当我在分页的第一页(即资源/博客)时 获取我的数组的前3个元素,

  • 然后当我移动到下一个分页页面(即资源/博客/ 3) 获得接下来的3个项目,

  • 当我点击下一页(即resources / blog / 6)时,接下来的3个项目 等等。

相反的是在第一页上我得到前3个数组项,正如预期的那样,在第2页我得到了接下来的3个数组项,正如预期的那样,但是在下一页我仍然得到像第2页一样的项目(不是预期的),所以我猜我在数组中切片的方式有问题(在**中检查我的代码)。

任何想法如何解决这个问题?提前谢谢。

5 个答案:

答案 0 :(得分:1)

假设您的$offset相应地更改了页码,则应该

$this->data['array'] = array_slice($array, $offset, $per_page); 

因为array_slice第二个参数是偏移的,第三个是长度。

答案 1 :(得分:0)

这可以帮助你理解逻辑:

$per_page = 3;
$total_rows = count($array);
$pages = ceil($total_rows / $per_page);
$current_page = isset($_GET['i']) ? $_GET['i'] : 1;
$current_page = ($total_rows > 0) ? min($pages, $current_page) : 1;
$start = $current_page * $per_page - $per_page;

$slice = array_slice($array, $start, $per_page);
foreach ($slice as $k => $v) {
    echo '<pre>' . print_r($v, true) . '</pre>';
}

if ($pages > 0) {
    // Display Pagination
}

答案 2 :(得分:0)

我认为问题很严重:

} else {
// this is probably where my mistake is **
$this->data['array'] = array_slice($array, $per_page, $offset); 
}

函数array_slice():array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] ),所以正确的方法是:$this->data['array'] = array_slice($array, $offset, $per_page);

答案 3 :(得分:0)

修改你的代码。

    $per_page = 3;
   $total = count($array);
    if ($total > $per_page) {

        $this->load->library('pagination');

        $config['uri_segment'] = 3;
        $config['per_page'] = $per_page;
        $config['total_rows'] = $total;
        $config['base_url'] = site_url('resources/blog/');

        $offset = $this->uri->segment(3);
        $this->pagination->initialize($config);
        $this->data['pagination'] = $this->pagination->create_links();
    } else {
        $offset = 0;
        $this->data['pagination'] = '';
    }
  // this is the tricky part of my script
  // where I need to slice the array properly each time 
 if ($offset == 0) {
        $data['array'] = array_slice($array, 0, $per_page); 
    } else {
    // this is probably where my mistake is **
        $startoffset=$offset - 1;
        $this->data['array'] = array_slice($array,$startoffset, $per_page); 
    }

它将起作用,并将按页面显示数据。

答案 4 :(得分:0)

假设$current_page = 1$max_results = 10

$offset = $max_results * ($current_page - 1);
$results = array_slice($results, $offset, $max_results);

$offset是数组切片的开始,而$max_results是切片的长度。
这将为我们提供一个由$results[0]$results[9]组成的新数组。