Dans le développement de PHP, la fonction Array_Slice est une fonction de fonctionnement de tableau très pratique, qui peut couper un élément spécifié d'un tableau en tant que valeur de retour. Cependant, de nombreux débutants et même des programmeurs intermédiaires croient souvent à tort que Array_Slice modifiera directement le tableau d'origine, entraînant une confusion dans la logique du code et la difficulté de débogage. Cet article analysera les caractéristiques de la valeur de retour de Array_Slice en détail, révèlera la raison pour laquelle il ne modifie pas le tableau d'origine et donne des exemples pour éviter les pièges.
La syntaxe de base de Array_Slice est la suivante:
array array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false)
$ Array : Tableau d'origine.
$ Offset : la position à laquelle les interceptions de démarrage sont prises en charge, ce qui indique le compte à rebours de la queue du tableau.
$ Longueur : la longueur interceptée, par défaut au nombre d'éléments restants dans le tableau.
$ Preserve_Keys : s'il faut conserver le nom de clé du tableau d'origine, par défaut faux.
Cette fonction renvoie un nouveau tableau intercepté, plutôt qu'une référence au tableau d'origine.
Array_slice renvoie un "nouveau tableau", qui est composé de copier les éléments d'intervalle spécifiés du tableau d'origine. La copie du tableau dans PHP est réalisée par valeur (bien que l'implémentation sous-jacente ait une optimisation de copie-écriture), et aucune opération de modification en place n'est effectuée sur le tableau passé dans la fonction. En d'autres termes, l'intention d'origine de Array_Slice est de maintenir l'intégrité et l'immuabilité du réseau d'origine.
Par conséquent, lorsque vous utilisez Array_Slice , ce que vous obtenez est le nouveau tableau de résultats interceptés et le tableau d'origine reste inchangé.
$fruits = ['apple', 'banana', 'cherry', 'date'];
$sliced = array_slice($fruits, 1, 2);
print_r($sliced);
// Sortir:
// Array
// (
// [0] => banana
// [1] => cherry
// )
print_r($fruits);
// Sortir:
// Array
// (
// [0] => apple
// [1] => banana
// [2] => cherry
// [3] => date
// )
Ici, le tableau $ Fruits n'a pas été modifié, et $ Sined est le nouveau tableau qui a été intercepté.
Je pensais à tort que le tableau d'origine avait été modifié <br> Beaucoup de gens utilisent Array_slice et impriment à nouveau le tableau d'origine, et constatent que le tableau d'origine n'a pas changé, ils soupçonnent donc que la logique de code est incorrecte. En fait, Array_Slice ne change pas le tableau d'origine.
Essayez d'utiliser array_slice pour modifier directement le tableau <br> Certaines personnes peuvent écrire le code suivant:
$arr = [1,2,3,4,5];
$arr = array_slice($arr, 2);
Ceci attribue en fait le résultat d'interception à la variable de tableau d'origine. À l'heure actuelle, la variable pointe vers le nouveau tableau et le tableau d'origine est jeté. Si vous souhaitez "modifier" le tableau, vous remplacez réellement le tableau d'origine par le nouveau tableau, au lieu de la fonction Array_Slice en modifiant le tableau.
J'espère que le nom clé reste le même, oubliez de passer dans les paramètres <br> Par défaut, le tableau renvoyé par Array_Slice Re-index (à partir de 0), à moins que le quatrième paramètre ne soit défini sur true .
$arr = ['a' => 'apple', 'b' => 'banana', 'c' => 'cherry'];
$slice = array_slice($arr, 1, 2);
print_r($slice);
// Sortir:
// Array
// (
// [0] => banana
// [1] => cherry
// )
Ici, le nom de clé devient un index numérique. Si vous souhaitez conserver le nom de la clé, vous devez passer dans le quatrième paramètre:
$slice = array_slice($arr, 1, 2, true);
print_r($slice);
// Sortir:
// Array
// (
// [b] => banana
// [c] => cherry
// )
Il est clair que Array_Slice renvoie un nouveau tableau et ne changera pas le tableau passé lui-même.
Si vous souhaitez "mettre à jour" le tableau, vous devez affecter manuellement la valeur à la variable d'origine ou à d'autres variables.
Notez si vous devez garder le nom de la clé et passer vrai pour éviter la perte du nom de clé.
Évitez la confusion avec Array_splice , qui est une fonction qui modifie directement le tableau d'origine.
Array_slice est une fonction pour intercepter les tableaux dans PHP. Il est conçu pour simplement renvoyer le nouveau tableau sans modifier le tableau d'origine. Cette conception évite les effets secondaires et rend le code plus sûr et maintenable. Comprendre cela peut aider les développeurs à éviter les malentendus et les pièges, à utiliser correctement la fonction d'interception du tableau et à améliorer la qualité du code.
Si vous devez supprimer, insérer et modifier le tableau d'origine, vous pouvez utiliser Array_splice , qui est la fonction qui modifie directement le tableau d'origine. Pour Array Intercept, Array_Slice est l'outil préféré pour immuable et renvoyer de nouveaux tableaux.