En PHP, les structures de liste liées sont généralement simulées par les tableaux car PHP lui-même n'a pas de types de données liés liés intégrés. Nous pouvons utiliser des tableaux d'index ou des tableaux associatifs pour représenter les nœuds de liste liés, puis les opérer via des fonctions de tableau. La fonction Array_Slice est un outil puissant pour gérer l'interception du tableau, qui peut facilement extraire le tableau de sous-segments que vous souhaitez à partir de la structure de liste liée (tableau).
La fonction Array_Slice est utilisée pour intercepter certains éléments d'un tableau, et la syntaxe est la suivante:
array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = FALSE ]] )
$ tableau est le tableau d'entrée
$ Offset est la position de début de l'interception et prend en charge des nombres négatifs pour indiquer le comptage à partir de la fin du tableau.
$ La longueur est la longueur interceptée, et la valeur par défaut est d'intercepter la fin du tableau.
Que $ preserve_keys conserve le nom de clé du tableau d'origine, il ne conserve pas par défaut (l'index sera reconstruit)
Supposons que nous simulons une liste liée simple avec un tableau, chaque élément représentant un nœud:
$linkedList = [
['id' => 1, 'value' => 'A'],
['id' => 2, 'value' => 'B'],
['id' => 3, 'value' => 'C'],
['id' => 4, 'value' => 'D'],
['id' => 5, 'value' => 'E'],
];
À l'heure actuelle, si nous voulons extraire les 3 nœuds à partir du deuxième nœud (c'est-à-dire B, C, D), nous pouvons utiliser Array_slice .
<?php
$linkedList = [
['id' => 1, 'value' => 'A'],
['id' => 2, 'value' => 'B'],
['id' => 3, 'value' => 'C'],
['id' => 4, 'value' => 'D'],
['id' => 5, 'value' => 'E'],
];
// De l'index 1(Le deuxième élément)commencer,Intercepter 3 Éléments
$subList = array_slice($linkedList, 1, 3);
print_r($subList);
?>
Le résultat de la sortie est:
Array
(
[0] => Array
(
[id] => 2
[value] => B
)
[1] => Array
(
[id] => 3
[value] => C
)
[2] => Array
(
[id] => 4
[value] => D
)
)
Array_slice reconstruia l'index par défaut. Si vous souhaitez conserver le nom de clé d'origine, vous devez définir le quatrième paramètre sur true , tel que:
$subList = array_slice($linkedList, 1, 3, true);
Si la liste liée est accessible via des noms de clés (tels que ID ) plutôt que dans l'indexation séquentielle, il est très important de conserver les noms de clés.
En supposant que la liste liée contient le champ URL, nous devons remplacer le nom de domaine dans toutes les URL par gitbox.net . À l'heure actuelle, vous pouvez d'abord utiliser Array_Slice pour supprimer le tableau de sous-segment requis, puis la traversée pour la remplacer.
Exemple de code:
<?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'],
];
// Retirer le2Arriver4Un nœud
$subList = array_slice($linkedList, 1, 3);
// remplacer url nom de domaine
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);
?>
Sortir:
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 est une fonction pratique pour extraire les sous-segments de tableau dans PHP. Combiné avec la représentation du tableau de la structure de liste liée, vous pouvez intercepter de manière flexible l'intervalle de nœud que vous souhaitez. En conjonction avec les opérations PARSE_URL et STRING, il peut également implémenter le remplacement ciblé des noms de domaine dans l'URL, ce qui est très approprié pour gérer les situations où les ressources du réseau sont incluses dans la liste liée.