如果可能,我想要一些帮助。
我有一个包含数组项列表的数组(将其视为帖子列表),如下所示:
$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个项目,
相反的是在第一页上我得到前3个数组项,正如预期的那样,在第2页我得到了接下来的3个数组项,正如预期的那样,但是在下一页我仍然得到像第2页一样的项目(不是预期的),所以我猜我在数组中切片的方式有问题(在**中检查我的代码)。
任何想法如何解决这个问题?提前谢谢。
答案 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]
组成的新数组。