當前位置: 首頁> 最新文章列表> 利用array_slice 創建數組的子集

利用array_slice 創建數組的子集

gitbox 2025-05-28

在日常PHP 編程中,我們經常需要從一個數組中提取出一部分元素用於展示、分頁或處理子集數據。 PHP 提供了一個非常實用的函數—— array_slice() ,可以幫助我們高效地完成這項任務。

什麼是array_slice?

array_slice()是PHP 中用於從數組中提取一段子數組的函數。它不會改變原始數組,而是返回所截取部分的新數組。其基本語法如下:

 array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array
  • $array :原始數組。

  • $offset :從哪個位置開始截取。如果是負數,則從數組末尾倒數開始。

  • $length (可選):要截取的元素數量。如果省略,則從offset 開始一直截取到數組末尾。

  • $preserve_keys (可選):是否保留原來的鍵名,默認是false

示例講解

示例一:基本用法

$fruits = ['apple', 'banana', 'orange', 'grape', 'melon'];
$sliced = array_slice($fruits, 1, 3);
print_r($sliced);

輸出:

 Array
(
    [0] => banana
    [1] => orange
    [2] => grape
)

從下標1 開始,截取3 個元素。注意鍵名是重新排序的,因為preserve_keys默認為false

示例二:保留原始鍵名

$fruits = ['a' => 'apple', 'b' => 'banana', 'c' => 'orange', 'd' => 'grape'];
$sliced = array_slice($fruits, 1, 2, true);
print_r($sliced);

輸出:

 Array
(
    [b] => banana
    [c] => orange
)

這裡我們設置preserve_keystrue ,所以保留了原數組中的鍵名。

示例三:負數offset

 $numbers = [10, 20, 30, 40, 50];
$sliced = array_slice($numbers, -3, 2);
print_r($sliced);

輸出:

 Array
(
    [0] => 30
    [1] => 40
)

使用負數offset 從數組末尾倒數第三個元素開始截取2 個。

實際應用:分頁處理

假設我們從數據庫中讀取了一個包含多個文章標題的數組,現在需要實現分頁,每頁顯示5 條數據:

 $articles = [
    '文章1', '文章2', '文章3', '文章4', '文章5',
    '文章6', '文章7', '文章8', '文章9', '文章10',
    '文章11', '文章12'
];

$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$pageSize = 5;
$offset = ($page - 1) * $pageSize;

$pagedArticles = array_slice($articles, $offset, $pageSize);

foreach ($pagedArticles as $article) {
    echo "<p>$article</p>";
}

// 示例分頁鏈接
echo '<a href="https://gitbox.net/articles.php?page=1">首頁</a> ';
echo '<a href="https://gitbox.net/articles.php?page=2">1。2頁</a> ';
echo '<a href="https://gitbox.net/articles.php?page=3">1。3頁</a>';

以上代碼展示瞭如何用array_slice()結合$_GET參數實現簡單的分頁功能,並生成分頁鏈接。注意這裡的URL 使用的是gitbox.net域名。

小結

array_slice()是處理數組截取操作時不可或缺的工具,它靈活、高效且用法簡單。通過合理使用offset、length 和preserve_keys 參數,我們可以根據不同的場景快速獲得所需的數組子集。無論是在數據分頁、列表展示還是數據過濾中, array_slice()都能大顯身手。