web-dev-qa-db-fra.com

Fractionner une ficelle PHP avec chaque espace vide

J'ai une entrée où un utilisateur peut taper plusieurs mots, et on leur dit de le séparer par un espace. Donc, l'entrée peut ressembler à ceci:

foo

ou comme ceci:

foo bar php js

Comment puis-je vérifier les espaces, et s'il y a des espaces, diviser les mots, puis tout mettre dans un tableau? Je vais parcourir ce tableau dans mon programme. Je suis juste nouveau au traitement des cordes comme celui-ci.

19
AKor

Voir 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

Oui exploser fera tout pour vous et foreach peut être utilisé pour récupérer les valeurs du tableau à nouveau. Votre code complet ressemblera au suivant:

$str = "foo bar php js";
$arr =  explode(" ", $str);

//print all the value which are in the array
foreach($arr as $v){
    echo $v;
}

J'espère que ceci vous aidera.

9
enam

Daniel a déjà posté à propos de la division, permettez-moi d'ajouter la vérification de l'espace.

$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

Cela fonctionnera s'il n'y a pas d'espace entre la chaîne d'entrée .`

    $pieces = explode(" ", $pizza);
    if(count($pieces > 1)) {
        foreach($pieces as $piece) {
            echo $piece;
        }
    }
    else {
        echo $userInput;
    }
?>`

Explication:
Après avoir éclaté la ficelle en morceaux. Premièrement, il vérifie si nous avons plus d'éléments dans le tableau, c'est-à-dire $ pièces si oui, il imprimera via foreach loop sinon, il imprimera simplement l'entrée utilisateur.

0
Shahzad Ahmed

Cela pourrait aussi fonctionner, c'est presque la même chose que l'une des réponses déjà données.

$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

Comme Daniel l'a dit, explode() est parfait pour ce genre de situation. Vous voudrez peut-être aussi regarder preg_split() (uniquement à titre de référence), car il accepte une expression régulière plutôt qu'un simple délimiteur et vous permettra de diviser les entrées selon un modèle plus complexe.

0
Endophage

À des fins d'optimisation, je pense qu'il est préférable de supprimer les espaces en excès, comme les doubles, avant d'utiliser la fonction d'exploser. Par exemple: si vous avez "foo bar php js ", cette chaîne doit devenir "foo bar php js" avant d'utiliser la fonction éclatée. vous pouvez essayer ce code:

$charSet = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $charSet);
$charSet = rtrim($charSet);
$charSetArray = explode(" ", $charSet);
echo $charSetArray[0];
echo $charSetArray[1];
0
Jemuel Elimanco