Ich habe eine Eingabe, bei der ein Benutzer mehrere Wörter eingeben kann, und diese werden aufgefordert, sie durch ein Leerzeichen zu trennen. Die Eingabe könnte also so aussehen:
foo
oder so:
foo bar php js
Wie kann ich nach Leerzeichen suchen und wenn es Leerzeichen gibt, die Wörter aufteilen und dann alles in ein Array stellen? Ich werde dieses Array in meinem Programm durchlaufen. Ich bin gerade neu im Umgang mit Strings.
Siehe explode
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
Ja explode wird alles für Sie tun und foreach kann verwendet werden, um die Werte erneut aus dem Array abzurufen. Ihr vollständiger Code wird ungefähr wie folgt aussehen:
$str = "foo bar php js";
$arr = explode(" ", $str);
//print all the value which are in the array
foreach($arr as $v){
echo $v;
}
Hoffe, das wird dir helfen.
Daniel hat bereits über den Aufteilungs-Teil gepostet. Lassen Sie mich auch die Überprüfung des Platzes hinzufügen.
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pizza = trim($pizza);
if(strpos($pizza, " ") !== false)
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
}else{
echo $pizza;
}
Ihre Probeneingabe ist relativ ruhig. Wenn Sie Ihren Benutzern vertrauen, dass sie qualifizierende Teilzeichenfolgen eingeben, die immer durch genau ein Leerzeichen begrenzt sind, ist explode()
die beste Wahl.
Wenn die Benutzereingabe über Kleinbuchstaben hinaus variieren kann oder Sie beim Extrahieren validieren möchten, können Sie andere, besser geeignete Funktionen aufrufen.
Wenn Sie Ihre Geschäftslogik verstehen, finden Sie die beste Lösung für diese Aufgabe.
Eine Demonstration: https://3v4l.org/3TT2V
$input = "foo bar, php js double-space apo'strophe 9 ";
echo 'explode(): '; var_export(explode(' ', $input));
echo "\npreg_split(): "; var_export(preg_split('/ +/', $input, null, PREG_SPLIT_NO_EMPTY));
echo "\nstr_Word_count(): "; var_export(str_Word_count($input, 1));
echo "\npreg_match_all(): "; var_export(preg_match_all('/[a-z]+/', $input, $output) ? $output[0]: []);
Ausgabe:
explode(): array (
0 => 'foo',
1 => 'bar,',
2 => 'php',
3 => 'js',
4 => '',
5 => 'double-space',
6 => 'apo\'strophe',
7 => '9',
8 => '',
)
preg_split(): array (
0 => 'foo',
1 => 'bar,',
2 => 'php',
3 => 'js',
4 => 'double-space',
5 => 'apo\'strophe',
6 => '9',
)
str_Word_count(): array (
0 => 'foo',
1 => 'bar',
2 => 'php',
3 => 'js',
4 => 'double-space',
5 => 'apo\'strophe',
)
preg_match_all(): array (
0 => 'foo',
1 => 'bar',
2 => 'php',
3 => 'js',
4 => 'double',
5 => 'space',
6 => 'apo',
7 => 'strophe',
)
Dies funktioniert, wenn zwischen der Eingabezeichenfolge kein Leerzeichen steht.`
$pieces = explode(" ", $pizza);
if(count($pieces > 1)) {
foreach($pieces as $piece) {
echo $piece;
}
}
else {
echo $userInput;
}
?>`
Erklärung:
Nachdem der String in Stücke zerlegt wurde. Erstens wird geprüft, ob sich mehr Elemente im Array befinden, d. H. $ pieces Wenn ja, wird er über foreach loop gedruckt, andernfalls wird lediglich die Benutzereingabe gedruckt.
Dies könnte auch funktionieren, es ist fast genauso wie eine der bereits gegebenen Antworten.
$string = "my house is Nice";
//here the delimiter is " "
$array = explode(" ", $string);
//this will print all the array out
foreach($array as $v){
echo $v;
}
Wie Daniel sagte, ist explode()
perfekt für diese Art von Situation. Vielleicht möchten Sie auch preg_split()
(nur zur späteren Verwendung) betrachten, da es einen Regex akzeptiert und nicht nur ein einfaches Trennzeichen. Dadurch können Sie die Eingabe eines komplexeren Musters auflösen.
Zu Optimierungszwecken denke ich, es ist besser, überschüssige Leerzeichen wie doppelte Leerzeichen zu entfernen, bevor Sie die Explosionsfunktion verwenden. Beispiel: Wenn Sie "foo bar php js "
haben, muss diese Zeichenfolge "foo bar php js"
werden, bevor Sie die Funktion explode verwenden. Sie können diesen Code ausprobieren:
$charSet = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $charSet);
$charSet = rtrim($charSet);
$charSetArray = explode(" ", $charSet);
echo $charSetArray[0];
echo $charSetArray[1];