PHPでは、リンクされたリスト構造は通常、配列によってシミュレートされます。なぜなら、PHP自体には組み込みのリンクリストデータ型がないためです。インデックス配列または連想配列を使用して、リンクリストノードを表し、配列関数を介してそれらを動作させることができます。 array_slice関数は、リンクリスト構造(配列)から必要なサブセグメントの配列を簡単に抽出できるアレイインターセプトを処理するための強力なツールです。
array_slice関数は、配列からいくつかの要素を傍受するために使用され、構文は次のとおりです。
array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = FALSE ]] )
$配列は入力配列です
$ offsetはインターセプトの開始位置であり、マイナス数をサポートして、配列の終わりからカウントを示します。
$の長さはインターセプトされた長さであり、デフォルトは配列の終了を傍受することです。
$ preserve_keysが元の配列のキー名を保持しているかどうかは、デフォルトでは保持されません(インデックスは再構築されます)
各要素がノードを表す、アレイを使用して単純なリンクリストをシミュレートするとします。
$linkedList = [
['id' => 1, 'value' => 'A'],
['id' => 2, 'value' => 'B'],
['id' => 3, 'value' => 'C'],
['id' => 4, 'value' => 'D'],
['id' => 5, 'value' => 'E'],
];
この時点で、2番目のノード(つまり、b、c、d)から始まる3つのノードを抽出する場合は、 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(2番目の要素)始める,インターセプト 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はデフォルトでインデックスを再構築します。元のキー名を保持したい場合は、次のような4番目のパラメーターをtrueに設定する必要があります。
$subList = array_slice($linkedList, 1, 3, true);
リンクされたリストにシーケンシャルインデックスではなく、キー名( IDなど)からアクセスされる場合、キー名を保持することが非常に重要です。
リンクリストに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到着41つのノード
$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にドメイン名のターゲットを絞った交換を実装することもできます。これは、ネットワークリソースがリンクリストに含まれる状況を処理するのに非常に適しています。