webentwicklung-frage-antwort-db.com.de

Einen String aufteilen PHP mit jeder freien Stelle

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.

19
AKor

Siehe explode

// Example 1
$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
64
Daniel A. White

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.

9
enam

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;

}
2
Mr Coder

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',
)
1
mickmackusa

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.

0
Shahzad Ahmed

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;
}
0
Victor

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.

0
Endophage

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];
0
Jemuel Elimanco