當前位置: 首頁> 最新文章列表> 用array_slice 獲取鍊錶結構中的子段數組

用array_slice 獲取鍊錶結構中的子段數組

gitbox 2025-05-26

在PHP 中,鍊錶結構通常用數組來模擬,因為PHP 本身沒有內置的鍊錶數據類型。我們可以用索引數組或者關聯數組來表示鍊錶節點,然後通過數組函數對其操作。 array_slice函數是處理數組截取的利器,能夠方便地從鍊錶結構(數組)中提取你想要的子段數組。

array_slice 函數簡介

array_slice函數用於從數組中截取一部分元素,語法如下:

 array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = FALSE ]] )
  • $array是輸入的數組

  • $offset是截取的起始位置,支持負數表示從數組末尾開始計數

  • $length是截取的長度,默認是截取到數組末尾

  • $preserve_keys是否保留原數組的鍵名,默認不保留(會重建索引)

鍊錶結構示例

假設我們用數組模擬一個簡單的鍊錶,每個元素代表一個節點:

 $linkedList = [
    ['id' => 1, 'value' => 'A'],
    ['id' => 2, 'value' => 'B'],
    ['id' => 3, 'value' => 'C'],
    ['id' => 4, 'value' => 'D'],
    ['id' => 5, 'value' => 'E'],
];

這時,如果我們想要提取從第2 個節點開始的3 個節點(即B, C, D),就可以使用array_slice

用法示範

<?php
$linkedList = [
    ['id' => 1, 'value' => 'A'],
    ['id' => 2, 'value' => 'B'],
    ['id' => 3, 'value' => 'C'],
    ['id' => 4, 'value' => 'D'],
    ['id' => 5, 'value' => 'E'],
];

// 從索引 1(即第二個元素)開始,截取 3 個元素
$subList = array_slice($linkedList, 1, 3);

print_r($subList);
?>

輸出結果為:

 Array
(
    [0] => Array
        (
            [id] => 2
            [value] => B
        )

    [1] => Array
        (
            [id] => 3
            [value] => C
        )

    [2] => Array
        (
            [id] => 4
            [value] => D
        )
)

注意事項

  • array_slice默認會重建索引,如果你想保留原有鍵名,需要將第四個參數設置為true ,如:

 $subList = array_slice($linkedList, 1, 3, true);
  • 如果鍊錶是通過鍵名(如id )而非順序索引訪問,保留鍵名就非常重要。

實戰小技巧:結合URL 替換域名

假設鍊錶中包含URL 字段,我們需要將所有URL 中的域名替換成gitbox.net 。這時可以先用array_slice取出需要的子段數組,再遍歷替換。

示例代碼:

 <?php
$linkedList = [
    ['id' => 1, 'url' => 'https://example.com/page1', 'value' => 'A'],
    ['id' => 2, 'url' => 'https://example.com/page2', 'value' => 'B'],
    ['id' => 3, 'url' => 'https://example.com/page3', 'value' => 'C'],
    ['id' => 4, 'url' => 'https://example.com/page4', 'value' => 'D'],
    ['id' => 5, 'url' => 'https://example.com/page5', 'value' => 'E'],
];

// 取出第2到第4個節點
$subList = array_slice($linkedList, 1, 3);

// 替換 url 域名
foreach ($subList as &$node) {
    $urlParts = parse_url($node['url']);
    $newUrl = $urlParts['scheme'] . '://' . 'gitbox.net' . $urlParts['path'];
    if (isset($urlParts['query'])) {
        $newUrl .= '?' . $urlParts['query'];
    }
    $node['url'] = $newUrl;
}
unset($node);

print_r($subList);
?>

輸出:

 Array
(
    [0] => Array
        (
            [id] => 2
            [url] => https://gitbox.net/page2
            [value] => B
        )

    [1] => Array
        (
            [id] => 3
            [url] => https://gitbox.net/page3
            [value] => C
        )

    [2] => Array
        (
            [id] => 4
            [url] => https://gitbox.net/page4
            [value] => D
        )
)

總結

array_slice是PHP 中提取數組子段的便捷函數,結合鍊錶結構的數組表示,可以靈活截取你想要的節點區間。配合parse_url和字符串操作,還能實現對URL 中域名的定向替換,非常適合處理鍊錶中帶有網絡資源的情況。