Par exemple, je voudrais créer un tableau à partir des éléments de cette chaîne:
$str = 'red, green, blue ,orange';
Je sais que vous pouvez les exploser, les parcourir en boucle et les couper:
$arr = explode(',', $str);
foreach ($arr as $value) {
$new_arr[] = trim($value);
}
Mais j'ai l'impression qu'il existe une approche en une seule ligne qui peut gérer cela. Des idées?
Une réponse améliorée
Résultat:
Ce
la source
red
par*red*
. Un meilleur pourrait être / (\ s *, \ s *) + /Ce qui suit prend également en charge les espaces blancs au début / à la fin de la chaîne d'entrée:
et ceci est un test minimal avec des espaces blancs dans chaque position sensible:
la source
array_map
solutions et regexp produisent des résultats identiques, quelqu'un pourrait-il comparer leurs performances?voici comment remplacer et exploser en une seule ligne de code
affichera les résultats comme
la source
En combinant certains des principes dans les réponses existantes, j'ai trouvé
Le raisonnement derrière cela est que j'ai trouvé un bogue dans cette réponse , où s'il y a une virgule à la fin de la chaîne, elle renverra un élément vide dans le tableau. c'est à dire
Résulte en
Vous pouvez résoudre ce problème en utilisant PREG_SPLIT_NO_EMPTY comme mentionné dans cette réponse pour le supprimer, mais une fois que vous faites cela, il n'est techniquement pas nécessaire de supprimer des virgules consécutives via l'expression régulière, donc l'expression raccourcie
la source
Vous pouvez également le faire avec une expression régulière d'une ligne
la source
essaye ça:
la source
preg_replace()
ne génère pas de tableau à partir d'une chaîne. C'est la bonne réponse à la mauvaise question. Voté contre.$list = preg_split("/\s*,\s*/", 'red, green, blue ,orange');
modification mineure réhabilite la réponseSPÉCIFIQUEMENT pour la chaîne d'exemple de l'OP, car chaque sous-chaîne à mettre en correspondance est un seul mot, vous pouvez utiliser str_word_count () .
Code: ( Démo )
Production:
Cela peut également être adapté pour les sous-chaînes au-delà des lettres (et certains tirets et apostrophes - si vous lisez les petits caractères) en ajoutant les caractères nécessaires au masque de caractère / 3e paramètre.
Code: ( Démo )
Production:
Encore une fois, je traite cette question très étroitement en raison de la chaîne d'exemple, mais cela fournira le même résultat souhaité:
Code: ( Démo )
la source
Vous pouvez utiliser preg_split () pour cela.
la source
la source
\t\n\r\0\x0B
aussi$ str = 'rouge, vert, bleu, orange';
$ str = trim ($ str);
$ strArray = exploser (',', $ str);
print_r ($ strArray);
la source