10/10/2018, 09:42
Phân trang với mảng làm sao nhỉ
Học càng nhiều thấy càng dốt, các bác help với nè. Tui có cai mảng nhu sau:
$arr = array(
'5' => 'http://wwww.fsd.f.s',
'23' => 'http://wwww.xx.f.s',
'65' => 'http://wwww.xsfsafsd.s',
'78' => 'http://wwww.wreww.f.s',
'56' => 'http://wwww.uiyuu.f.s',
'67' => 'http://wwww.uiyuu.f.s',
'34' => 'http://wwww.uiyuu.f.s',
);
Giờ muốn phân trang để mỗi lần chỉ hiện 1 cặp key=>value.
$arr = array(
'5' => 'http://wwww.fsd.f.s',
'23' => 'http://wwww.xx.f.s',
'65' => 'http://wwww.xsfsafsd.s',
'78' => 'http://wwww.wreww.f.s',
'56' => 'http://wwww.uiyuu.f.s',
'67' => 'http://wwww.uiyuu.f.s',
'34' => 'http://wwww.uiyuu.f.s',
);
Giờ muốn phân trang để mỗi lần chỉ hiện 1 cặp key=>value.
Bài liên quan
$arr = array(
'5' => 'http://wwww.fsd.f.s',
'23' => 'http://wwww.xx.f.s',
'65' => 'http://wwww.xsfsafsd.s',
'78' => 'http://wwww.wreww.f.s',
'56' => 'http://wwww.uiyuu.f.s',
'67' => 'http://wwww.uiyuu.f.s',
'34' => 'http://wwww.uiyuu.f.s',
);
$arrr = array();
foreach($arr as $k=>$v)
{
$arrr***91;***93; = array($k, $v);
}
print_r($arrr);
$arr = array(
'5' => 'http://wwww.fsd.f.s',
'23' => 'http://wwww.xx.f.s',
'65' => 'http://wwww.xsfsafsd.s',
'78' => 'http://wwww.wreww.f.s',
'56' => 'http://wwww.uiyuu.f.s',
'67' => 'http://wwww.uiyuu.f.s',
'34' => 'http://wwww.uiyuu.f.s',
);
$arrr = array();
foreach($arr as $k=>$v)
{
$arrr***91;***93; = array($k, $v);
}
$page = (isset($_GET***91;'page'***93;))?intval($_GET***91;'page'***93;)-1:0;
if(isset($arrr***91;$page***93;))
{
echo $arrr***91;$page***93;***91;0***93;."-".$arrr***91;$page***93;***91;1***93;;
}
else
{
header("HTTP/1.1 404 Not Found");
exit();
}
echo "<hr>";
for($i=1; $i<=count($arrr); $i++)
{
echo "<a href=\"test.php?page=$i\">$i</a> ";
}
- Thứ nhất: Trong code trên giả sử bạn muốn mỗi lần (mỗi trang) sẽ hiện 2,3,... cặp key => value thì các bạn sửa code như thế nào, ko biết khi viết code các bạn có tính đến điểm này không?
- Thứ hai: Lại là vấn đề giải thuật cho đoạn code trên, ko biết các bạn có để ý không nhưng nếu các bạn nhìn kỹ code trên thì có thể dễ dàng thấy được rằng biến $arrr được tạo ra có độ lớn tương đương với biến $arr đầu vào, trong khi biến này chỉ sử dụng duy nhất 1 phần tử $arrr[$page]. Điều này rõ ràng là lãng phí bộ nhớ của hệ thống, hơn nữa để tạo đc biến này hệ thống lại phải duyệt qua toàn bộ mảng $arr -> tốn nhiều thời gian để xử lý. Đôi khi trong một phần xử lý nhỏ các bạn không nhận ra sự khác biệt nhưng khi xây dựng một hệ thống lớn gồm nhiều tầng, nhiều công đoạn xử lý khác nhau thì bạn sẽ nhận thấy giải thuật đối với từng hàm số, từng đoạn xử lý nhỏ là quan trọng. Trong lập trình web, giải thuật ko được đánh giá cao bằng thiết kế hệ thống nhưng đối với một PG thì tốt nhất vẫn nên cố xử lý ở mức tốt nhất có thể.
=> Quay lại đoạn code trên, phương án của mình như sau
$arr = array(
'5' => 'http://wwww.fsd.f.s',
'23' => 'http://wwww.xx.f.s',
'65' => 'http://wwww.xsfsafsd.s',
'78' => 'http://wwww.wreww.f.s',
'56' => 'http://wwww.uiyuu.f.s',
'67' => 'http://wwww.uiyuu.f.s',
'34' => 'http://wwww.uiyuu.f.s',
);
$page = (isset($_GET***91;'page'***93;) && $_GET***91;'page'***93; > 0) ? intval($_GET***91;'page'***93;) : 1;
$page_size = 1;// mỗi lần chỉ hiện 1 cặp key=>value
$page_count = ceil(count($arr)/$page_size);// num of page
// get current page items
$items = array_slice($arr, ($page-1)*$page_size, $page_size, true);
// display current page content
echo "\n<h4>Trang {$page}</h4>";
foreach ($items as $key => $val)
{
echo "\n\t<div>{$key} - <span>{$val}</span></div>";
}
echo "<hr>";
for ($i = 1; $i <= $page_count; $i++)
{
echo "<span><a href=\"test.php?page={$i}\">{$i}</a></span> ";
}