length - str_split php
Explosionando por Array of Delimiters (5)
El método de explosión de php no admite varios delimitadores, por lo que no puede pasarle una matriz. Además, ¿qué tipo de cadena está analizando que tiene varios delimitadores? lo mejor que puedes hacer es recorrer los delimitadores y volver a explotar algunas de las cadenas explotadas.
¿Hay alguna forma de explotar () usando una matriz de delimitadores?
Manual de PHP:
explote la matriz (cadena $ delimitador, cadena $ cadena [, int $ límite])
En lugar de usar la string $delimiter
¿hay alguna manera de usar la array $delimiter
sin afectar demasiado el rendimiento?
Las sugerencias anteriores no funcionarán si los delimitadores después del primer delimitador incluyen caracteres de ese primer delimitador. Por ejemplo, si desea utilizar saltos de línea como delimitadores, pero no está seguro de si su entrada usa / r / n, / r o simplemente / n, no puede usar los métodos anteriores.
$str = ''___RN___RN___R___N___RN___RN'';
$del = array(''RN'', ''R'', ''N'');
# This won''t work if delimiters 2, 3, n include characters from delimiter 1
var_dump(explode( $del[0], str_replace($del, $del[0], $str)));
Esto dará como resultado:
array(11) {
[0]=>
string(4) "___R"
[1]=>
string(0) ""
[2]=>
string(4) "___R"
[3]=>
string(0) ""
[4]=>
string(4) "___R"
[5]=>
string(3) "___"
[6]=>
string(4) "___R"
[7]=>
string(0) ""
[8]=>
string(4) "___R"
[9]=>
string(0) ""
[10]=>
string(0) ""
}
Lo cual no es ideal si estás planeando hacer comparaciones de cadenas. En su lugar, tendrá que ser un poco más complejo. Lo que he escrito a continuación puede que no sea el más eficiente y sucinto, pero funciona.
# This, however, will work
function array_explode($delimiters, $string){
if(!is_array(($delimiters)) && !is_array($string)){
//if neither the delimiter nor the string are arrays
return explode($delimiters,$string);
} else if(!is_array($delimiters) && is_array($string)) {
//if the delimiter is not an array but the string is
foreach($string as $item){
foreach(explode($delimiters, $item) as $sub_item){
$items[] = $sub_item;
}
}
return $items;
} else if(is_array($delimiters) && !is_array($string)) {
//if the delimiter is an array but the string is not
$string_array[] = $string;
foreach($delimiters as $delimiter){
$string_array = array_explode($delimiter, $string_array);
}
return $string_array;
}
}
var_dump(array_explode($del,$str));
Se emitirá lo siguiente:
array(7) {
[0]=>
string(3) "___"
[1]=>
string(3) "___"
[2]=>
string(3) "___"
[3]=>
string(3) "___"
[4]=>
string(3) "___"
[5]=>
string(3) "___"
[6]=>
string(0) ""
}
Tener un juego: https://3v4l.org/bJOkI
Use preg_split()
con una expresión regular apropiada.
function explode_by_array($delim, $input) {
$unidelim = $delim[0];
$step_01 = str_replace($delim, $unidelim, $input); //Extra step to create a uniform value
return explode($unidelim, $step_01);
}
Eso ha mejorado el código de @ 65Fbef05. Usamos el primer delimitador, porque "+delim+"
se puede usar en la cadena original.
$str = ''Monsters are SUPER scary, bro!'';
$del = array(''a'', ''b'', ''c'');
// In one fell swoop...
$arr = explode( $del[0], str_replace($del, $del[0], $str) );