首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP array_slice 函數完整用法與分頁實戰範例

     編輯:PHP 綜合知識

array_slice 是 PHP 陣列切片利器,支援正負偏移、長度控制、鍵名保留。本文詳細解析參數行為,並提供完整的陣列分頁實作範例。

函數語法

array_slice(array, offset, length, preserve_keys)
參數說明
array輸入陣列(必填)
offset起始位置:正數從前往後、負數從後往前
length切片長度:正數向後、負數向前;省略則切到結尾
preserve_keystrue 保留原鍵名、false(預設)重新索引

基本範例

<?php
$arr = [0, 1, 2, 3, 4];
var_dump(array_slice($arr, 0, 2));     // [0, 1]
var_dump(array_slice($arr, -2, 1));    // [3]
var_dump(array_slice($arr, 1, -1));    // [1, 2, 3]

$assoc = ['a'=>[1,2], 'b'=>[3,4]];
var_dump(array_slice($assoc, 0, 1, true)); // 保留鍵 'a'
?>

實戰:陣列分頁完整實作

<?php
// 模擬資料庫查詢結果(二維陣列)
$arr = [
    ['name'=>'name1','sex'=>'sex1','job'=>'job1'],
    ['name'=>'name2','sex'=>'sex2','job'=>'job2'],
    ['name'=>'name3','sex'=>'sex3','job'=>'job3'],
    ['name'=>'name4','sex'=>'sex4','job'=>'job4'],
    ['name'=>'name5','sex'=>'sex5','job'=>'job5'],
    ['name'=>'name6','sex'=>'sex6','job'=>'job6'],
    ['name'=>'name7','sex'=>'sex7','job'=>'job7'],
    ['name'=>'name8','sex'=>'sex8','job'=>'job8'],
    ['name'=>'name9','sex'=>'sex9','job'=>'job9'],
    ['name'=>'name10','sex'=>'sex10','job'=>'job10'],
    ['name'=>'name11','sex'=>'sex11','job'=>'job11'],
    ['name'=>'name12','sex'=>'sex12','job'=>'job12'],
];

$perpage = 3;                    // 每頁筆數
$total = count($arr);            // 總筆數
$pages = ceil($total/$perpage);  // 總頁數

// 取得當前頁碼(預設第 1 頁)
$page = isset($_GET['page']) && is_numeric($_GET['page']) ? (int)$_GET['page'] : 1;
$page = max(1, min($page, $pages)); // 限制範圍

$start = ($page - 1) * $perpage;
$pageData = array_slice($arr, $start, $perpage, true); // 保留鍵名
?>

<table border="1" cellpadding="5">
<tr><th>Name</th><th>Sex</th><th>Job</th></tr>
<?php foreach ($pageData as $row): ?>
<tr>
    <td><?php echo $row['name']; ?></td>
    <td><?php echo $row['sex']; ?></td>
    <td><?php echo $row['job']; ?></td>
</tr>
<?php endforeach; ?>
</table>

<div class="pagination">
<?php if ($page > 1): ?>
    <a href="?page=1">首頁</a>
    <a href="?page=<?php echo $page-1; ?>">上一頁</a>
<?php endif; ?>

<?php if ($page < $pages): ?>
    <a href="?page=<?php echo $page+1; ?>">下一頁</a>
    <a href="?page=<?php echo $pages; ?>">末頁</a>
<?php endif; ?>
</div>

進階技巧

  • 多維陣列分頁:preserve_keys=true 保留原始鍵名,避免重新索引導致關聯資料錯位
  • 記憶體優化:大量資料請用資料庫 LIMIT OFFSET,勿先 fetchAll 再切片
  • 負數長度:array_slice($arr, 2, -1) 從索引 2 切到倒數第 2(不含最後 1 筆)

相關函數對照

函數用途
array_slice切片(不修改原陣列)
array_splice切片並從原陣列移除(可替換)
array_chunk等長分塊(如每 3 筆一組)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved