PHP Velho Oeste 2024

mb_str_split

(PHP 7 >= 7.4.0, PHP 8)

mb_str_splitВозвращает массив символов заданной многобайтовой строки

Описание

mb_str_split(string $string, int $length = 1, ?string $encoding = null): array

Функция вернёт массив строк, это версия функции str_split() с поддержкой кодировок переменного размера символов, а также кодировок фиксированного размера из 1-, 2- или 4-байтовых символов. Если указан параметр length, строка разбивается на части заданной длины в символах (не байтах). Может быть указан необязательный параметр encoding, это хорошая практика.

Список параметров

string

Строка (string) для разделения на символы или части.

length

Если указан, каждый элемент возвращаемого массива будет состоять из нескольких символов вместо одного символа.

encoding

Параметр encoding — это кодировка символов. Если он опущен или равен null, для него будет установлена внутренняя кодировка символов.

Строка, указывающая одну из поддерживаемых кодировок.

Возвращаемые значения

Возвращает массив строк.

Список изменений

Версия Описание
8.0.0 Теперь параметр encoding может принимать значение null.
8.0.0 Функция больше не возвращает false в случае возникновения ошибки.

Смотрите также

  • str_split() - Преобразовывает строку в массив

add a note add a note

User Contributed Notes 3 notes

up
7
webmaster at redinfo dot co dot kr
1 year ago
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;
    }
}
up
7
info at ensostudio dot ru
3 years ago
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;
}
?>
up
-6
vovan-ve at yandex dot ru
3 years ago
Lazy polyfill for UTF-8 only:

function utf8_str_split(string $input, int $splitLength = 1)
{
    $re = \sprintf('/\\G.{1,%d}+/us', $splitLength);
    \preg_match_all($re, $input, $m);
    return $m[0];
}
To Top