- Cтроку в массив по разделителю в PHP: explode, str_split, strtok — что выбрать?
- 2. preg_split: разбить строку на массив по регулярному выражению
- Преобразовать строку в массив по количеству символов
- Функция strtok(): разбиение строки на токены
- explode
- Список параметров
- Возвращаемые значения
- Список изменений
- Примеры
- Примечания
- Смотрите также
- Преобразование строк в массив PHP
- Разделить текст по переносам строк
- Результат:
- Разделить текст по предложениям
- Результат:
- Разделить текст по словам
- Результат:
- Разделить текст по буквам
- Результат:
- Разделить текст по нескольким разделителям
- Результат:
- Результат:
- Разделить текст на равные части
- Результат:
- str_split
- Ошибки
- Список изменений
- Примеры
- Примечания
- Смотрите также
- User Contributed Notes 3 notes
Cтроку в массив по разделителю в PHP: explode, str_split, strtok — что выбрать?
Для того, чтобы преобразовать строку в массив по разделителю, можно использовать функцию explode()
Необходимые параметры: разделитель и строка.
// Пример 1 $pizza = "кусок1 кусок2 кусок3 кусок4 кусок5 кусок6"; $pieces = explode(" ", $pizza); echo $pieces[0]; // кусок1 echo $pieces[1]; // кусок2 // Пример 2 $data = "foo:*:1023:1000::/home/foo:/bin/sh"; list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data); echo $user; // foo echo $pass; // *
2. preg_split: разбить строку на массив по регулярному выражению
Если возможностей explode() недостаточно, то можно использовать более мощную функцию: preg_split(). Она позволяет разбить строку не по фиксированному набору символов, а по регулярному выражению.
// разбиваем строку по произвольному числу запятых и пробельных символов, // которые включают в себя " ", \r, \t, \n и \f $keywords = preg_split("/[\s,]+/", "hypertext language, programming"); print_r($keywords);
/* Array ( [0] => hypertext [1] => language [2] => programming ) */
Преобразовать строку в массив по количеству символов
Функция str_split() преобразует строку в массив, разбивая ее на элементы с заданным количеством символов. Хотите узнать как ее использовать? Посмотрите документацию.
$str = "Hello Friend"; $arr2 = str_split($str, 3); print_r($arr2)
Array ( [0] => Hel [1] => lo [2] => Fri [3] => end )
Функция strtok(): разбиение строки на токены
Есть еще функция strtok() . Она позволит задать набор из нескольких символов-разделителей, для разделения строки по словам: читать подробнее про strok.
explode
Возвращает массив строк, полученных разбиением строки string с использованием delimiter в качестве разделителя.
Список параметров
Если аргумент limit является положительным, возвращаемый массив будет содержать максимум limit элементов, при этом последний элемент будет содержать остаток строки string .
Если параметр limit отрицателен, то будут возвращены все компоненты кроме последних — limit .
Если limit равен нулю, то он расценивается как 1.
Замечание:
По историческим причинам, функции implode() можно передавать аргументы в любом порядке, но для explode() это недопустимо. Убедитесь в том, что delimiter указан перед аргументом string .
Возвращаемые значения
Возвращает массив ( array ) строк ( string ), созданный делением параметра string по границам, указанным параметром delimiter .
Если delimiter является пустой строкой («»), explode() возвращает FALSE . Если delimiter не содержится в string , и используется отрицательный limit , то будет возвращен пустой массив ( array ), иначе будет возвращен массив, содержащий string .
Список изменений
Версия | Описание |
---|---|
5.1.0 | Добавлена поддержка отрицательных значений limit |
Примеры
Пример #1 Пример использования explode()
// Пример 1
$pizza = «кусок1 кусок2 кусок3 кусок4 кусок5 кусок6» ;
$pieces = explode ( » » , $pizza );
echo $pieces [ 0 ]; // кусок1
echo $pieces [ 1 ]; // кусок2
?php
// Пример 2
$data = «foo:*:1023:1000::/home/foo:/bin/sh» ;
list( $user , $pass , $uid , $gid , $gecos , $home , $shell ) = explode ( «:» , $data );
echo $user ; // foo
echo $pass ; // *
Пример #2 Пример возвращаемого значения explode()
/*
Строка, которая не содержит разделителя, будет
просто возвращать массив с одним значением оригинальной строки.
*/
$input1 = «hello» ;
$input2 = «hello,there» ;
var_dump ( explode ( ‘,’ , $input1 ) );
var_dump ( explode ( ‘,’ , $input2 ) );
?php
Результат выполнения данного примера:
array(1) ( [0] => string(5) "hello" ) array(2) ( [0] => string(5) "hello" [1] => string(5) "there" )
Пример #3 Примеры с использованием параметра limit
// положительный лимит
print_r ( explode ( ‘|’ , $str , 2 ));
// отрицательный лимит (начиная с PHP 5.1)
print_r ( explode ( ‘|’ , $str , — 1 ));
?>
Результат выполнения данного примера:
Array ( [0] => один [1] => два|три|четыре ) Array ( [0] => один [1] => два [2] => три )
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Смотрите также
- preg_split() — Разбивает строку по регулярному выражению
- str_split() — Преобразует строку в массив
- mb_split() — Разделение строк в многобайтных кодировках, используя регулярное выражение
- str_word_count() — Возвращает информацию о словах, входящих в строку
- strtok() — Разбивает строку на токены
- implode() — Объединяет элементы массива в строку
Преобразование строк в массив PHP
Примеры преобразования строк текста в массив по разным разделителям.
Разделить текст по переносам строк
$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin blandit magna eu tempus ullamcorper. Sed porta justo sed nibh elementum condimentum. Quisque non eros sit amet elit commodo maximus eget a eros."; $array = explode("\n", $text); print_r($array);
Результат:
Array ( [0] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. [1] => Proin blandit magna eu tempus ullamcorper. [2] => Sed porta justo sed nibh elementum condimentum. [3] => Quisque non eros sit amet elit commodo maximus eget a eros. )
Разделить текст по предложениям
$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin blandit magna eu tempus ullamcorper! Sed porta justo sed nibh elementum condimentum. Quisque non eros sit amet elit commodo maximus eget a eros?"; $text = str_replace("\n", '', $text); $array = preg_split('/(?<=[. ])\s+(?=[a-zа-яё])/i', $text); print_r($array);
Результат:
Array ( [0] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. [1] => Proin blandit magna eu tempus ullamcorper! [2] => Sed porta justo sed nibh elementum condimentum. [3] => Quisque non eros sit amet elit commodo maximus eget a eros? )
Разделить текст по словам
$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin blandit magna eu tempus ullamcorper."; $text = preg_replace("/[^a-zа-яё0-9\s]/i", '', $text); $array = preg_split('/(\s)/', $text); $array = array_diff($array, array('')); print_r($array);
Результат:
Array ( [0] => Lorem [1] => ipsum [2] => dolor [3] => sit [4] => amet [5] => consectetur [6] => adipiscing [7] => elit [8] => Proin [9] => blandit [10] => magna [11] => eu [12] => tempus [13] => ullamcorper )
Разделить текст по буквам
$text = "Lorem ipsum dolor sit amet"; $array = str_split($text); print_r($array);
Результат:
Array ( [0] => L [1] => o [2] => r [3] => e [4] => m [5] => [6] => i [7] => p [8] => s [9] => u [10] => m [11] => [12] => d [13] => o [14] => l [15] => o [16] => r [17] => [18] => s [19] => i [20] => t [21] => [22] => a [23] => m [24] => e [25] => t )
Разделить текст по нескольким разделителям
$text = "Lorem ipsum dolor sit amet-proin blandit magna eu:Sed porta justo."; $array = preg_split('/[-|:]/u', $text, -1, PREG_SPLIT_NO_EMPTY); print_r($array);
Результат:
Array ( [0] => Lorem ipsum dolor sit amet [1] => proin blandit magna eu [2] => Sed porta justo. )
Если разделитель из нескольких символов, например
и :
$text = "Lorem ipsum dolor sit amet,
proin blandit magna eu.Sed porta justo."; $array = preg_split('/(
)|()/u', $text, -1, PREG_SPLIT_NO_EMPTY); print_r($array);
Результат:
Array ( [0] => Lorem ipsum dolor sit amet, [1] => proin blandit magna eu. [2] => Sed porta justo. )
Разделить текст на равные части
$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin blandit magna eu tempus ullamcorper."; $chunks = 10; $array = str_split($text); $chunks = array_chunk($array, $chunks, false); $result = array(); foreach ($chunks as $chunk) < $result[] = implode($chunk); >print_r($result);
Результат:
Array ( [0] => Lorem ipsu [1] => m dolor si [2] => t amet, co [3] => nsectetur [4] => adipiscing [5] => elit. Pro [6] => in blandit [7] => magna eu [8] => tempus ull [9] => amcorper. )
str_split
Если указан необязательный параметр length , возвращаемый массив будет разбит на фрагменты, каждый из которых будет иметь длину length , за исключением последнего фрагмента, который может быть короче, если строка делится неравномерно. По умолчанию параметр length равен 1 , то есть размер каждого фрагмента будет один байт.
Ошибки
Если параметр length меньше 1 , будет выброшена ошибка ValueError .
Список изменений
Версия | Описание |
---|---|
8.2.0 | Если параметр string не задан, теперь возвращается пустой массив ( array ). Ранее возвращался массив ( array ), содержащий одну пустую строку |
8.0.0 | Теперь если параметр length меньше 1 , будет выброшена ошибка ValueError ; ранее, вместо этого выдавалась ошибка уровня E_WARNING , а функция возвращала false . |
Примеры
Пример #1 Пример использования str_split()
$arr1 = str_split ( $str );
$arr2 = str_split ( $str , 3 );
print_r ( $arr1 );
print_r ( $arr2 );
Результат выполнения данного примера:
Array ( [0] => H [1] => e [2] => l [3] => l [4] => o [5] => [6] => F [7] => r [8] => i [9] => e [10] => n [11] => d ) Array ( [0] => Hel [1] => lo [2] => Fri [3] => end )
Примечания
Замечание:
Функция str_split() производит разбивку по байтам, а не по символам, в случае использования строк в многобайтных кодировках. Используйте функцию mb_str_split() , чтобы разбить строку на кодовые точки.
Смотрите также
- mb_str_split() - Если задана многобайтовая строка возвращает массив символов
- chunk_split() - Разбивает строку на фрагменты
- preg_split() - Разбивает строку по регулярному выражению
- explode() - Разбивает строку с помощью разделителя
- count_chars() - Возвращает информацию о символах, входящих в строку
- str_word_count() - Возвращает информацию о словах, входящих в строку
- for
User Contributed Notes 3 notes
The function str_split() is not 'aware' of words. Here is an adaptation of str_split() that is 'word-aware'.
$array = str_split_word_aware (
'In the beginning God created the heaven and the earth. And the earth was without form, and void; and darkness was upon the face of the deep.' ,
32
);
/**
* This function is similar to str_split() but this function keeps words intact; it never splits through a word.
*
* @return array
*/
function str_split_word_aware ( string $string , int $maxLengthOfLine ): array
if ( $maxLengthOfLine <= 0 ) throw new RuntimeException ( sprintf ( 'The function %s() must have a max length of line at least greater than one' , __FUNCTION__ ));
>
$lines = [];
$words = explode ( ' ' , $string );
$currentLine = '' ;
$lineAccumulator = '' ;
foreach ( $words as $currentWord )
$currentWordWithSpace = sprintf ( '%s ' , $currentWord );
$lineAccumulator .= $currentWordWithSpace ;
if ( strlen ( $lineAccumulator ) < $maxLengthOfLine ) $currentLine = $lineAccumulator ;
continue;
>
// Overwrite the current line and accumulator with the current word
$currentLine = $currentWordWithSpace ;
$lineAccumulator = $currentWordWithSpace ;
>
if ( $currentLine !== '' ) $lines [] = $currentLine ;
>
array( 5 ) [ 0 ]=> string ( 29 ) "In the beginning God created "
[ 1 ]=> string ( 30 ) "the heaven and the earth. And "
[ 2 ]=> string ( 28 ) "the earth was without form, "
[ 3 ]=> string ( 27 ) "and void; and darkness was "
[ 4 ]=> string ( 27 ) "upon the face of the deep. "
>