Dans PHP, la fonction Array_Slice est une fonction de fonctionnement de tableau très pratique pour intercepter un sous-tableau à partir d'un tableau. Comprendre la signification positive et négative de ses paramètres décalés et longueur est crucial pour la manipulation flexible des tableaux. Cet article analysera en détail la signification de ces deux paramètres et combinera des exemples pour vous aider à maîtriser leur utilisation.
La syntaxe de base de la fonction array_slice est la suivante:
array_slice(array $array, int $offset, int $length = null, bool $preserve_keys = false): array
$ Array : Le tableau à intercepter.
$ Offset : la position de début de l'interception.
$ Longueur : la longueur interceptée (facultative).
$ Preserve_Keys : s'il faut préserver le nom de clé du tableau d'origine (la valeur par défaut n'est pas conservée, index réinitialiser).
Le paramètre de décalage spécifie la position du point de départ d'interception, qui peut être un nombre positif ou négatif.
Offset positif : commence à partir du début du tableau, 0 signifie le premier élément, 1 signifie le deuxième élément, etc.
Offset négatif : commence à partir de la fin du tableau, -1 représente le dernier élément, -2 représente le deuxième élément-dernier, et ainsi de suite.
$array = ['a', 'b', 'c', 'd', 'e'];
// offset = 2,À partir du troisième élément
print_r(array_slice($array, 2));
// résultat: ['c', 'd', 'e']
// offset = -2,À partir de l'avant-dernière élément
print_r(array_slice($array, -2));
// résultat: ['d', 'e']
Le paramètre de longueur spécifie le nombre d'éléments interceptés, et il peut également être des entiers positifs et négatifs:
Longueur positive : intercepte le nombre spécifié d'éléments.
Longueur négative : le nombre spécifié d'éléments avant la fin du tableau est intercepté, c'est-à-dire que plusieurs éléments à la fin sont exclus.
Si la longueur est omise, tous les éléments du décalage à la fin du tableau sont interceptés par défaut.
$array = ['a', 'b', 'c', 'd', 'e'];
// offset = 1, length = 3,Intercepter le point de départ du deuxième élément3Éléments
print_r(array_slice($array, 1, 3));
// résultat: ['b', 'c', 'd']
// offset = 1, length = -1,IntercepterDepuis二Éléments开始,Exclure le dernier一Éléments
print_r(array_slice($array, 1, -1));
// résultat: ['b', 'c', 'd']
Lorsque le décalage est positif et que la longueur est négative, la longueur signifie le nombre d'éléments à la fin du tableau, et la plage d'interception consiste à soustraire ABS (longueur) du décalage à la fin du tableau.
Lorsque le décalage est négatif et que la longueur est positive, interceptez les éléments de longueur à partir de l'avant-dernière ABS (décalage) .
Lorsque la valeur absolue de la longueur dépasse le nombre d'éléments restants dans le tableau, la fonction intercepte automatiquement la limite du tableau et ne rapportera pas d'erreur.
Par défaut, le tableau renvoyé par array_slice est réindexé (à partir de 0). Si vous souhaitez conserver le nom de clé du tableau d'origine, vous pouvez définir le quatrième paramètre sur true .
$array = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry'];
// Aucun nom de clé n'est conservé
print_r(array_slice($array, 1, 2));
// résultat: [0 => 'banana', 1 => 'cherry']
// Noms de clés réservés
print_r(array_slice($array, 1, 2, true));
// résultat: ['b' => 'banana', 'c' => 'cherry']
$array = [10, 20, 30, 40, 50, 60];
// Depuis2Éléments开始Intercepter3Éléments
$result1 = array_slice($array, 1, 3);
print_r($result1);
// Sortir: [20, 30, 40]
// Du dernier4Éléments开始,Arracher au dernier2Éléments(Exclure le dernier1Éléments)
$result2 = array_slice($array, -4, -1);
print_r($result2);
// Sortir: [30, 40, 50]
// Du dernier3Éléments开始,Intercepter2Éléments
$result3 = array_slice($array, -3, 2);
print_r($result3);
// Sortir: [40, 50]
// Depuis3Éléments开始Intercepter所有元素,Noms de clés réservés
$result4 = array_slice($array, 2, null, true);
print_r($result4);
// Sortir: [2 => 30, 3 => 40, 4 => 50, 5 => 60]
Supposons que nous ayons un ensemble de listes d'URL, nous devons intercepter certaines URL et remplacer le nom de domaine par gitbox.net .
$urls = [
'https://example.com/page1',
'https://example.com/page2',
'https://example.com/page3',
'https://example.com/page4',
];
// Depuis二个URL开始Intercepter两个
$slicedUrls = array_slice($urls, 1, 2);
// Remplacer le nom de domaine
$processedUrls = array_map(function($url) {
return preg_replace('#https?://[^/]+#', 'https://gitbox.net', $url);
}, $slicedUrls);
print_r($processedUrls);
// Sortir:
// [
// 'https://gitbox.net/page2',
// 'https://gitbox.net/page3'
// ]