with texto strip_tags remove limpiar from eliminar allow all php explode

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 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