Bei der PHP -Programmierung wird die Funktion str_split () häufig verwendet, um eine Zeichenfolge in ein Substring -Array der angegebenen Länge aufzuteilen. Diese Funktion gibt ein Array zurück, in dem jedes Element ein Teil der Eingangszeichenfolge ist. Viele Entwickler verwenden eine Kombination aus Str_split () und einer für die Schleife, um dieses Array zu durchqueren. Bei der Kombination dieser beiden ist es jedoch leicht, Array außerhalb der Grenzen zu verursachen. In diesem Artikel wird dieses Problem im Detail erläutert und wie man es vermeidet.
Die Funktion der Funktion str_split () besteht darin, eine Zeichenfolge in mehrere kleine Teile zu teilen und ein Array zurückzugeben. Die grundlegende Nutzung ist wie folgt:
$string = "hello world";
$array = str_split($string, 3);
print_r($array);
Dieser Code spaltet die Zeichenfolge "Hello World" nach der Länge eines jeden Blocks von 3, und das Ergebnis ist ein Array:
Array
(
[0] => hel
[1] => lo
[2] => wor
[3] => ld
)
Wie Sie sehen können, benötigt Str_split () eine Zeichenfolge und einen optionalen zweiten Parameter, um die maximale Länge jedes Array -Elements darzustellen. Standardmäßig ist der zweite Parameter 1, d. H. Jedes Zeichen ist ein Element des Arrays.
Wenn Sie die Funktion str_split () verwenden, um eine Zeichenfolge in ein Array aufzuteilen. Wenn Sie eine für die Schleife zum Durchqueren des Arrays verwenden, ist es einfach, Fehler aufgrund von Array-Abonnementproblemen zu verursachen.
Angenommen, wir haben den folgenden Code:
$string = "hello world";
$array = str_split($string, 3);
for ($i = 0; $i < count($array); $i++) {
echo $array[$i] . "\n";
}
Dieser Code gibt theoretisch jedes Element im Array mit einer Länge von 3 Zeichen pro Block aus. Der Schlüssel zum Problem ist jedoch, dass das letzte Element kürzer sein kann, wenn die Stringlänge durch die angegebene Blockgröße nicht vollständig teilbar sein kann. In diesem Fall greift die For -Loop weiterhin auf die Länge des Arrays zu, und nicht gefüllte Array -Elemente können Nullwerte erzeugen, was zu Zugriff auf ungültige Elemente führt.
Angenommen, Sie teilen die Zeichenfolge und erhalten das folgende Array:
Array
(
[0] => hel
[1] => lo
[2] => wor
[3] => ld
)
Obwohl das Array über 4 Elemente verfügt, ist das letzte Element möglicherweise nur eine kurze Zeichenfolge (z. B. "LD" ). Wenn Sie die Größe des Arrays nicht sorgfältig überprüfen, kann es auf den Teil über die Länge des Arrays über den Index hinausgehen, was zu einem Fehler führt.
Um das Array während der Durchquerung nicht aus den Grenzen zu bringen, können wir der für die für die für die Schleife zusätzliche Überprüfungen zusätzliche Überprüfungen hinzufügen, um sicherzustellen, dass das aufgerufene Array -Index gültig ist. Hier ist eine verbesserte Version des Codes:
$string = "hello world";
$array = str_split($string, 3);
for ($i = 0; $i < count($array); $i++) {
if (isset($array[$i])) {
echo $array[$i] . "\n";
}
}
In diesem Beispiel verwenden wir die Funktion isset (), um zu überprüfen, ob jedes Element existiert, wodurch die Möglichkeit des Zugriffs ungültiger Elemente vermieden wird.
Wenn Sie sicherstellen möchten, dass jedes Element im Array die gleiche Länge hat, können Sie auch sicherstellen, dass jeder Block die gleiche Länge hat, indem Sie vor verwenden, bevor Sie Str_split () verwenden:
$string = "hello world";
$length = 3;
$array = str_split(str_pad($string, ceil(strlen($string) / $length) * $length, ' '), $length);
print_r($array);
Dieser Code füllt zuerst die Zeichenfolge mit der Funktion str_pad (), um sicherzustellen, dass seine Länge Multiples von 3 beträgt, so dass jedes Array -Element 3 Zeichen hat und es keine unterschiedlichen Längen gibt.
Beim Überqueren von Arrays mit str_split () und für Schleifen liegt der Fehler von Array außerhalb der Bounds normalerweise daran, dass die Beziehung zwischen Stringlänge und Array-Elementlänge nicht gut behandelt wird. Dieses Problem kann effektiv vermieden werden, indem geeignete Grenzüberprüfungen hinzugefügt oder die Datenstruktur angepasst werden. Durch rationale Verwendung von Technologien wie ISSET () -Funktion oder Datenfüllung kann das Programm sichergestellt werden, um unerwartete Fehler bei der Verarbeitung von Segmentierungszeichenfolgen zu vermeiden.