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.
s.code viết 11:58 ngày 10/10/2018
PHP Code:
$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); 
Nhìn cái mảng sau đó. Là biết ngay ấy mà.
vntux viết 11:48 ngày 10/10/2018
Cái này là đưa key và value vào trong 1 phần tử mảng khác, hình như giống nhau, hay tại tui ngốc quá?
s.code viết 11:56 ngày 10/10/2018
Uhm đưa vào mảng có số thứ tự từ 0 đến count($arrr) đó. Dựa vào key đó để truy xuất và phân trang. Mỗi phần tử là 1 trang.

PHP Code:
$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> ";

vntux viết 11:52 ngày 10/10/2018
Cảm ơn bạn rất nhiều nhé S.Gallery. ^^
fotech_nd viết 11:46 ngày 10/10/2018
Được gửi bởi s.code
Uhm đưa vào mảng có số thứ tự từ 0 đến count($arrr) đó. Dựa vào key đó để truy xuất và phân trang. Mỗi phần tử là 1 trang.

PHP Code:
$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> ";

=> Xin phép có một số ý kiến như sau:

- 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
PHP Code:
$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_sizetrue);

// 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> ";

vntux viết 11:52 ngày 10/10/2018
Hì, tại vấn đề của mình nhỏ thôi nên cách giải quyết của bác S.Gallery ổn rồi, cách của bác fotech_nd cũng rất hay. Thanks 2 bác
Bài liên quan
0