php 數(shù)組分頁(yè)可通過(guò)以下方法實(shí)現(xiàn):數(shù)組切片(array_slice()):根據(jù)偏移量和長(zhǎng)度切分?jǐn)?shù)組。外部迭代器(limititerator):使用迭代器遍歷數(shù)組,設(shè)置偏移量和長(zhǎng)度限制。內(nèi)置函數(shù)(array_chunk()):將數(shù)組分成指定大小的塊。本地實(shí)現(xiàn):自定義函數(shù)實(shí)現(xiàn)分頁(yè)算法,包括計(jì)算總頁(yè)數(shù)、偏移量和返回分頁(yè)后的數(shù)組。
PHP 數(shù)組分頁(yè)的實(shí)現(xiàn)方式
分頁(yè)是 web 開(kāi)發(fā)中一個(gè)常見(jiàn)的需求,它可以將大量數(shù)據(jù)分成較小的塊,從而提高頁(yè)面加載速度和用戶(hù)體驗(yàn)。在 PHP 中,有多種實(shí)現(xiàn)數(shù)組分頁(yè)的方法。
數(shù)組切片
這是最簡(jiǎn)單的方法,使用 PHP 的 array_slice() 函數(shù):
// 獲取當(dāng)前頁(yè) $currentPage = (isset($_GET['page'])) ? (int) $_GET['page'] : 1; // 每頁(yè)顯示的記錄數(shù) $perPage = 10; // 計(jì)算偏移量 $offset = ($currentPage - 1) * $perPage; // 分頁(yè)后的數(shù)組 $paginatedArray = array_slice($array, $offset, $perPage);
登錄后復(fù)制
外部迭代器
PHP 中的標(biāo)準(zhǔn)類(lèi)庫(kù)提供了一個(gè)用于遍歷數(shù)組的 LimitIterator 類(lèi):
use IteratorIterator;
use LimitIterator;
// 創(chuàng)建外部迭代器
$limitIterator = new LimitIterator(new ArrayIterator($array), $offset, $perPage);
// 分頁(yè)后的數(shù)組
$paginatedArray = [];
foreach ($limitIterator as $item) {
$paginatedArray[] = $item;
}
登錄后復(fù)制
內(nèi)置函數(shù)
PHP 7.1 及更高版本中引入了 array_chunk() 函數(shù),它將數(shù)組分成指定大小的塊:
// 分頁(yè)后的數(shù)組 $paginatedArray = array_chunk($array, $perPage);
登錄后復(fù)制
本地實(shí)現(xiàn)
也可以使用函數(shù)來(lái)實(shí)現(xiàn)自己的分頁(yè)算法:
function paginate(array $array, int $currentPage, int $perPage): array
{
$totalPages = ceil(count($array) / $perPage);
if ($currentPage < 1 || $currentPage > $totalPages) {
return [];
}
$offset = ($currentPage - 1) * $perPage;
return array_slice($array, $offset, $perPage);
}
登錄后復(fù)制
實(shí)戰(zhàn)案例
假設(shè)我們有一個(gè) $users 數(shù)組,包含 100 個(gè)用戶(hù),現(xiàn)在我們需要在每頁(yè)顯示 10 條數(shù)據(jù):
// 獲取當(dāng)前頁(yè) $currentPage = (isset($_GET['page'])) ? (int) $_GET['page'] : 1; // 分頁(yè)后的用戶(hù)數(shù)組 $paginatedUsers = paginate($users, $currentPage, 10);
登錄后復(fù)制
然后,我們可以在頁(yè)面上顯示分頁(yè)后的用戶(hù)數(shù)據(jù):
<ul>
<?php foreach ($paginatedUsers as $user): ?>
<li><?php echo $user['name']; ?></li>
<?php endforeach; ?>
</ul>
登錄后復(fù)制
分頁(yè)控制可以根據(jù)需要實(shí)現(xiàn),例如:
<nav aria-label="Pagination">
<ul class="pagination">
<?php if ($currentPage > 1): ?>
<li class="page-item">
<a class="page-link" href="<?php echo "?page=" . ($currentPage - 1); ?>">Previous</a>
</li>
<?php endif; ?>
<?php for ($i = 1; $i <= $totalPages; $i++): ?>
<li class="page-item <?php echo ($currentPage == $i) ? 'active' : ''; ?>">
<a class="page-link" href="<?php echo "?page=" . $i; ?>"><?php echo $i; ?></a>
</li>
<?php endfor; ?>
<?php if ($currentPage < $totalPages): ?>
<li class="page-item">
<a class="page-link" href="<?php echo "?page=" . ($currentPage + 1); ?>">Next</a>
</li>
<?php endif; ?>
</ul>
</nav>
登錄后復(fù)制






