Tengo un problema, tengo una matriz de cadenas y quiero explotar en un delimitador diferente. Por ejemplo
$example = 'Appel @ Ratte';
$example2 = 'apple vs ratte'
y necesito una matriz que explote en @ o vs.
Ya escribí una solución, pero si todos tienen una solución mejor, publique aquí.
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;
}

Respuestas:
¿Qué hay de usar
$ output = preg_split ("/ (@ | vs) /", $ input);fuente
explode()/,?). Por ejemplo:preg_split("/(\/|\?|=)/", $foo);.$str='/x/1/2/3/4/5/y/100/200/z/777'; preg_split("/(x|y|z|)/", $str);y para verarray('x'=>'1/2/3/4/5', 'y'=>'100/200', 'z'=>'777')/ (y) /dejé que preg_split funcionara. Tuve que eliminar los espacios y luego funcionó como se esperaba (usando PHP 7)Puede tomar la primera cadena, reemplazar todo
@con elvsusostr_replace, luego explotarvso viceversa.fuente
(@|@!)caso)Fuente: php @ metehanarslan en php.net
fuente
¿Qué te parece usar
strtr()para sustituir todos tus otros delimitadores con el primero?Supongo que es ilegible, pero lo probé porque funcionaba aquí.
One-liners ftw!
fuente
¿No
strtok()funcionaría para ti?fuente
Simplemente puede usar el siguiente código:
fuente
Puedes probar esta solución ... Funciona muy bien
Fuente: http://www.phpdevtips.com/2011/07/exploding-a-string-using-multiple-delimiters-using-php/
fuente
Lo hago de esta manera ...
fuente
¿Qué tal esto?
En su caso, debe usar una matriz para el parámetro $ delimiters. Entonces es posible usar múltiples caracteres como un delimitador.
Si no le interesan los espacios finales en sus resultados, puede eliminar la
array_map('trim', [...] )parte en la fila de retorno. (Pero no seas un discutidor en este caso. Mantén elpreg_split).Versión PHP requerida: 5.3.0 o superior.
Puedes probarlo aquí
fuente
Tendrá algunos problemas (por ejemplo, si tiene esta cadena: "vs @ apples") usando este método de separación, pero si comenzamos diciendo que ha pensado en eso y ha solucionado todas esas posibles colisiones, ¿Podrías reemplazar todas las ocurrencias de
$delimiter[1]a$delimiter[n]con$delimiter[0], y luego dividirte en la primera?fuente
Si su delimitador son solo caracteres, puede usarlos
strtok, lo que parece encajar mejor aquí. Tenga en cuenta que debe usarlo con unwhilebucle para lograr los efectos.fuente
Esto funcionará:
Como puede ver, primero pega las partes explotadas por \ n \ r junto con un espacio, para luego cortarlo nuevamente, esta vez tomando los espacios con él.
fuente