Dans la programmation PHP, la fonction str_split () est souvent utilisée pour diviser une chaîne en un tableau de sous-chaîne de longueur spécifiée. Cette fonction renvoie un tableau où chaque élément fait partie de la chaîne d'entrée. De nombreux développeurs utiliseront une combinaison de str_split () et d'une boucle pour traverser ce tableau. Cependant, lors de la combinaison de ces deux, il est facile de provoquer des bornes. Cet article discutera de ce problème en détail et comment l'éviter.
La fonction de la fonction str_split () consiste à diviser une chaîne en plusieurs petites pièces et à renvoyer un tableau. Son utilisation de base est la suivante:
$string = "hello world";
$array = str_split($string, 3);
print_r($array);
Ce code divisera la chaîne "Hello World" en fonction de la longueur de chaque bloc de 3, et le résultat est un tableau:
Array
(
[0] => hel
[1] => lo
[2] => wor
[3] => ld
)
Comme vous pouvez le voir, str_split () nécessite une chaîne et un deuxième paramètre facultatif pour représenter la longueur maximale de chaque élément de tableau. Par défaut, le deuxième paramètre est 1, c'est-à-dire que chaque caractère est un élément du tableau.
Lorsque vous utilisez la fonction str_split () pour diviser une chaîne en un tableau, si vous utilisez une boucle pour la boucle pour parcourir le tableau, il est facile de provoquer des erreurs hors limites en raison de problèmes d'indice de tableau du tableau.
Supposons que nous ayons le code suivant:
$string = "hello world";
$array = str_split($string, 3);
for ($i = 0; $i < count($array); $i++) {
echo $array[$i] . "\n";
}
Ce code publie théoriquement chaque élément du tableau à une longueur de 3 caractères par bloc. Cependant, la clé du problème est que lorsque la longueur de la chaîne ne peut pas être complètement divisible par la taille du bloc spécifiée, le dernier élément peut être plus court que les autres. Dans ce cas, la boucle FOR continuera à accéder à la longueur du tableau, et les éléments de tableau non remplis peuvent produire des valeurs nulles, ce qui entraîne un accès à des éléments non valides.
Supposons que vous divisez la chaîne et obtenez le tableau suivant:
Array
(
[0] => hel
[1] => lo
[2] => wor
[3] => ld
)
Bien que le tableau dispose de 4 éléments, le dernier élément peut être juste une courte chaîne (comme "LD" ), si vous ne vérifiez pas soigneusement la taille du tableau, il peut accéder à la partie au-delà de la longueur du tableau via l'index, ce qui entraîne une erreur.
Pour éviter les limites du tableau pendant la traversée, nous pouvons ajouter des vérifications supplémentaires à la boucle pour s'assurer que l'indice du tableau accessible est valide. Voici une version améliorée du code:
$string = "hello world";
$array = str_split($string, 3);
for ($i = 0; $i < count($array); $i++) {
if (isset($array[$i])) {
echo $array[$i] . "\n";
}
}
Dans cet exemple, nous utilisons la fonction ISSet () pour vérifier si chaque élément existe, évitant ainsi la possibilité d'accéder à des éléments invalides.
De plus, si vous souhaitez vous assurer que chaque élément du tableau a la même longueur, vous pouvez également vous assurer que chaque bloc a la même longueur par rembourrage avant d'utiliser str_split () :
$string = "hello world";
$length = 3;
$array = str_split(str_pad($string, ceil(strlen($string) / $length) * $length, ' '), $length);
print_r($array);
Ce code remplira d'abord la chaîne avec la fonction str_pad () pour s'assurer que sa longueur est de multiples de 3 , de sorte que chaque élément de tableau aura 3 caractères et qu'il n'y aura pas de longueurs différentes.
Lors de la traversée des tableaux avec str_split () et pour les boucles, l'erreur de détruire du tableau est généralement due au fait que la relation entre la longueur de la chaîne et la longueur de l'élément de tableau n'est pas bien gérée. Ce problème peut être évité efficacement en ajoutant des contrôles de limite appropriés ou en ajustant la structure des données. En utilisant rationnellement des technologies telles que la fonction ISSet () ou le remplissage des données, le programme peut être assuré d'éviter les erreurs inattendues lors du traitement des chaînes de segmentation.