texto - Php mĂșltiples delimitadores en explotar
string strip_tags (11)
¿No funcionaría strtok()
para usted?
Tengo un problema, tengo una matriz de cadenas y quiero explotar en diferentes delimitadores. Por ejemplo
$example = ''Appel @ Ratte'';
$example2 = ''apple vs ratte''
y necesito una matriz que explota en @ o frente a
Ya escribí una solución, pero si todos tienen una mejor solución, 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;
}
¿Qué hay de usar strtr()
para sustituir todos sus otros delimitadores con el primero?
private function multiExplode($delimiters,$string) {
return explode($delimiters[0],strtr($string,array_combine(array_slice($delimiters,1),array_fill(0,count($delimiters)-1,array_shift($delimiters))))));
}
Es algo ilegible, supongo, pero lo probé trabajando aquí.
One-liners ftw!
¿qué hay de usar
$output = preg_split( "/ (@|vs) /", $input );
Esto funcionará:
$stringToSplit = ''This is my String!'' ."/n/r". ''Second Line'';
$split = explode (
'' '', implode (
'' '', explode (
"/n/r", $stringToSplit
)
)
);
Como puedes ver, primero pega las partes / n / r / ndestruidas junto con un espacio, para luego volver a cortarlo, esta vez llevándose los espacios.
Lo hago de esta manera ...
public static function multiExplode($delims, $string, $special = ''|||'') {
if (is_array($delims) == false) {
$delims = array($delims);
}
if (empty($delims) == false) {
foreach ($delims as $d) {
$string = str_replace($d, $special, $string);
}
}
return explode($special, $string);
}
Puedes probar esta solución ... Funciona muy bien
function explodeX( $delimiters, $string )
{
return explode( chr( 1 ), str_replace( $delimiters, chr( 1 ), $string ) );
}
$list = ''Thing 1&Thing 2,Thing 3|Thing 4'';
$exploded = explodeX( array(''&'', '','', ''|'' ), $list );
echo ''<pre>'';
print_r($exploded);
echo ''</pre>'';
Referencia: http://www.phpdevtips.com/2011/07/exploding-a-string-using-multiple-delimiters-using-php/
Puedes tomar la primera cadena, reemplazar todos los @
con vs
usando str_replace
, luego explotar en vs
o viceversa.
Si su delimitador es solo caracteres, puede usar strtok
, que parece ser más adecuado aquí. Tenga en cuenta que debe usarlo con un ciclo while para lograr los efectos.
Simplemente puede usar el siguiente código:
$arr=explode(''sep1'',str_replace(array(''sep2'',''sep3'',''sep4''),''sep1'',$mystring));
Tendrás algunos problemas (por ejemplo, si tienes esta cadena: "vs @ apples") usando este método de separación, pero si comenzamos por decir que has pensado en eso y has solucionado todas las posibles colisiones, ¿podría simplemente reemplazar todas las ocurrencias de $delimiter[1]
a $delimiter[n]
con $delimiter[0]
, y luego dividir en el primero?
function multiexplode ($delimiters,$string) {
$ready = str_replace($delimiters, $delimiters[0], $string);
$launch = explode($delimiters[0], $ready);
return $launch;
}
$text = "here is a sample: this text, and this will be exploded. this also | this one too :)";
$exploded = multiexplode(array(",",".","|",":"),$text);
print_r($exploded);
//And output will be like this:
// Array
// (
// [0] => here is a sample
// [1] => this text
// [2] => and this will be exploded
// [3] => this also
// [4] => this one too
// [5] => )
// )
Fuente: php @ metehanarslan en php.net