PHPでは、 array_slice関数は、アレイからサブアレイを傍受するための非常に実用的な配列動作関数です。そのパラメーターのオフセットと長さの正と否定的な意味を理解することは、アレイの柔軟な操作に重要です。この記事では、これら2つのパラメーターの意味を詳細に分析し、例を組み合わせて使用するのに役立ちます。
array_slice関数の基本的な構文は次のとおりです。
array_slice(array $array, int $offset, int $length = null, bool $preserve_keys = false): array
$配列:インターセプトされる配列。
$ offset :インターセプトの開始位置。
$ length :インターセプトされた長さ(オプション)。
$ preserve_keys :元の配列のキー名を保持するかどうか(デフォルトは保存されておらず、インデックスリセット)。
オフセットパラメーターは、インターセプトの開始点の位置を指定します。これは、正または負の数になります。
正のオフセット:アレイの先頭から始まり、0は最初の要素を意味し、1は2番目の要素などを意味します。
負のオフセット:アレイの端から始まり、-1は最後の要素を表し、-2は2番目の最後の要素などを表します。
$array = ['a', 'b', 'c', 'd', 'e'];
// offset = 2,3番目の要素から始まります
print_r(array_slice($array, 2));
// 結果: ['c', 'd', 'e']
// offset = -2,最後から2番目の要素から始まります
print_r(array_slice($array, -2));
// 結果: ['d', 'e']
長さパラメーターは、傍受された要素の数を指定し、正と負の整数にもなります。
正の長さ:指定された要素の数をインターセプトします。
負の長さ:アレイの終了前の指定された要素の数が傍受されます。つまり、最後のいくつかの要素は除外されます。
長さが省略されている場合、アレイのオフセットから終了までのすべての要素は、デフォルトで傍受されます。
$array = ['a', 'b', 'c', 'd', 'e'];
// offset = 1, length = 3,2番目の要素からの開始点を傍受します3要素
print_r(array_slice($array, 1, 3));
// 結果: ['b', 'c', 'd']
// offset = 1, length = -1,インターセプトから二要素开始,最後を除外します一要素
print_r(array_slice($array, 1, -1));
// 結果: ['b', 'c', 'd']
オフセットが正であり、長さが負の場合、長さはアレイの端にある要素の数を意味し、インターセプト範囲はABS(長さ)をオフセットからアレイの端まで減算することです。
オフセットが負で長さが正の場合、最後から2番目のABS(オフセット)要素から始まる長さ要素を傍受します。
長さの絶対値が配列内の残りの要素の数を超える場合、関数はアレイ境界を自動的にインターセプトし、エラーを報告しません。
デフォルトでは、 array_sliceによって返される配列が再インネックスされます(0から始まる)。元の配列のキー名を保持したい場合は、4番目のパラメーターをtrueに設定できます。
$array = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry'];
// キー名は保持されません
print_r(array_slice($array, 1, 2));
// 結果: [0 => 'banana', 1 => 'cherry']
// 予約されたキー名
print_r(array_slice($array, 1, 2, true));
// 結果: ['b' => 'banana', 'c' => 'cherry']
$array = [10, 20, 30, 40, 50, 60];
// から2要素开始インターセプト3要素
$result1 = array_slice($array, 1, 3);
print_r($result1);
// 出力: [20, 30, 40]
// 最後から4要素开始,最後にひったくります2要素(最後を除外します1要素)
$result2 = array_slice($array, -4, -1);
print_r($result2);
// 出力: [30, 40, 50]
// 最後から3要素开始,インターセプト2要素
$result3 = array_slice($array, -3, 2);
print_r($result3);
// 出力: [40, 50]
// から3要素开始インターセプト所有元素,予約されたキー名
$result4 = array_slice($array, 2, null, true);
print_r($result4);
// 出力: [2 => 30, 3 => 40, 4 => 50, 5 => 60]
URLリストのセットがあるとして、いくつかのURLを傍受し、ドメイン名をgitbox.netに置き換える必要があります。
$urls = [
'https://example.com/page1',
'https://example.com/page2',
'https://example.com/page3',
'https://example.com/page4',
];
// から二个URL开始インターセプト两个
$slicedUrls = array_slice($urls, 1, 2);
// ドメイン名を置き換えます
$processedUrls = array_map(function($url) {
return preg_replace('#https?://[^/]+#', 'https://gitbox.net', $url);
}, $slicedUrls);
print_r($processedUrls);
// 出力:
// [
// 'https://gitbox.net/page2',
// 'https://gitbox.net/page3'
// ]