(PHP 7 >= 7.4.0, PHP 8)
mb_str_split — Para una cadena multibyte dada, devuelve un array de sus caracteres
Esta función devolverá un array de strings, es una versión de str_split()
con soporte para codificaciones de tamaño de carácter variable así como para codificaciones de tamaño fijo
de caracteres de 1, 2 o 4 bytes.
Si el parámetro length es especificado, la cadena se divide en bloques de la longitud
especificada en caracteres (y no en bytes).
El parámetro encoding es opcional pero se recomienda proporcionarlo.
stringEl string a dividir en caracteres o en trozos.
lengthSi se especifica, cada elemento del array devuelto estará compuesto por múltiples caracteres en lugar de un solo carácter.
encodingencoding
es la codificación de caracteres. Si se omite o es null , se utilizará el valor
de la codificación de caracteres interna.
Una cadena de caracteres que especifica uno de los encodings soportados.
mb_str_split() devuelve un array de strings.
| Versión | Descripción |
|---|---|
| 8.0.0 |
encoding ahora acepta null .
|
| 8.0.0 |
Esta función ya no devuelve false en caso de fallo.
|
if( !function_exists('mb_str_split')){
function mb_str_split( $string = '', $length = 1 , $encoding = null ){
if(!empty($string)){
$split = array();
$mb_strlen = mb_strlen($string,$encoding);
for($pi = 0; $pi < $mb_strlen; $pi += $length){
$substr = mb_substr($string, $pi,$length,$encoding);
if( !empty($substr)){
$split[] = $substr;
}
}
}
return $split;
}
}Note: function return NULL if can't convert argument type.
Polyfill PHP < 7.4 based on package "symfony/polyfill-mbstring":
<?php
function mb_str_split($string, $split_length = 1, $encoding = null)
{
if (null !== $string && !\is_scalar($string) && !(\is_object($string) && \method_exists($string, '__toString'))) {
trigger_error('mb_str_split(): expects parameter 1 to be string, '.\gettype($string).' given', E_USER_WARNING);
return null;
}
if (null !== $split_length && !\is_bool($split_length) && !\is_numeric($split_length)) {
trigger_error('mb_str_split(): expects parameter 2 to be int, '.\gettype($split_length).' given', E_USER_WARNING);
return null;
}
$split_length = (int) $split_length;
if (1 > $split_length) {
trigger_error('mb_str_split(): The length of each segment must be greater than zero', E_USER_WARNING);
return false;
}
if (null === $encoding) {
$encoding = mb_internal_encoding();
} else {
$encoding = (string) $encoding;
}
if (! in_array($encoding, mb_list_encodings(), true)) {
static $aliases;
if ($aliases === null) {
$aliases = [];
foreach (mb_list_encodings() as $encoding) {
$encoding_aliases = mb_encoding_aliases($encoding);
if ($encoding_aliases) {
foreach ($encoding_aliases as $alias) {
$aliases[] = $alias;
}
}
}
}
if (! in_array($encoding, $aliases, true)) {
trigger_error('mb_str_split(): Unknown encoding "'.$encoding.'"', E_USER_WARNING);
return null;
}
}
$result = [];
$length = mb_strlen($string, $encoding);
for ($i = 0; $i < $length; $i += $split_length) {
$result[] = mb_substr($string, $i, $split_length, $encoding);
}
return $result;
}
?>