J'ai un problème, j'ai un tableau de chaînes et je veux exploser dans un délimiteur différent. Par exemple
$example = 'Appel @ Ratte';
$example2 = 'apple vs ratte'
et j'ai besoin d'un tableau qui explose en @ ou vs.
J'ai déjà écrit une solution, mais si tout le monde a une meilleure solution, veuillez poster ici.
private function multiExplode($delimiters,$string) {
$ary = explode($delimiters[0],$string);
array_shift($delimiters);
if($delimiters != NULL) {
if(count($ary) <2)
$ary = $this->multiExplode($delimiters, $string);
}
return $ary;
}
Réponses:
qu'en est-il de l'utilisation
la source
explode()
/
,?
). Par exemple:preg_split("/(\/|\?|=)/", $foo);
.$str='/x/1/2/3/4/5/y/100/200/z/777'; preg_split("/(x|y|z|)/", $str);
et pour voirarray('x'=>'1/2/3/4/5', 'y'=>'100/200', 'z'=>'777')
/ (
et que) /
preg_split ne fonctionnait pas. J'ai dû supprimer les espaces puis cela a fonctionné comme prévu (en utilisant PHP 7)Vous pouvez prendre la première chaîne, remplacer toutes les
@
parvs
usingstr_replace
, puis exploservs
ou vice versa.la source
(@|@!)
cas par exemple)Source: php @ metehanarslan à php.net
la source
Que diriez-vous d'utiliser
strtr()
pour remplacer tous vos autres délimiteurs par le premier?C'est un peu illisible, je suppose, mais je l'ai testé comme fonctionnant ici.
One-liners ftw!
la source
Cela ne
strtok()
fonctionnerait pas pour vous?la source
Vous pouvez simplement utiliser le code suivant:
la source
Vous pouvez essayer cette solution ... Cela fonctionne très bien
Source: http://www.phpdevtips.com/2011/07/exploding-a-string-using-multiple-delimiters-using-php/
la source
Je le fais de cette façon ...
la source
Que dis-tu de ça?
Dans votre cas, vous devriez utiliser un tableau pour le paramètre $ delimiters. Ensuite, il est possible d'utiliser plusieurs caractères comme un seul délimiteur.
Si vous ne vous souciez pas des espaces de fin dans vos résultats, vous pouvez supprimer la
array_map('trim', [...] )
partie de la ligne de retour. (Mais ne soyez pas un chipoteur dans ce cas. Gardez lepreg_split
dedans.)Version PHP requise: 5.3.0 ou supérieure.
Vous pouvez le tester ici
la source
Vous allez avoir quelques problèmes (que se passe-t-il si vous avez cette chaîne: "vs @ pommes" par exemple) en utilisant cette méthode de séparation, mais si nous commençons par dire que vous avez pensé à cela et que vous avez corrigé toutes ces éventuelles collisions, vous pouvez simplement remplacer toutes les occurrences de
$delimiter[1]
à$delimiter[n]
par$delimiter[0]
, puis vous séparer de la première?la source
Si votre délimiteur n'est que des caractères, vous pouvez utiliser
strtok
, ce qui semble être plus adapté ici. Notez que vous devez l'utiliser avec unewhile
boucle pour obtenir les effets.la source
Cela fonctionnera:
Comme vous pouvez le voir, il colle d'abord les parties éclatées \ n \ r avec un espace, pour ensuite le découper à nouveau, cette fois en emportant les espaces avec lui.
la source