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
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 elvs
usostr_replace
, luego explotarvs
o 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 unwhile
bucle 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