- Cтроку в массив по разделителю в PHP: explode, str_split, strtok — что выбрать?
- 2. preg_split: разбить строку на массив по регулярному выражению
- Преобразовать строку в массив по количеству символов
- Функция strtok(): разбиение строки на токены
- str_split
- Ошибки
- Список изменений
- Примеры
- Примечания
- Смотрите также
- User Contributed Notes 3 notes
- str_split
- Примеры
- Примечания
- Смотрите также
- split
- Список параметров
- Возвращаемые значения
- Примеры
- Примечания
- Смотрите также
- Split a comma-delimited string into an array?
- 8 Answers 8
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.
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. »
>
str_split
Если указан необязательный аргумент split_length , возвращаемый массив будет содержать части исходной строки длиной split_length каждая, иначе каждый элемент будет содержать один символ.
Если split_length меньше 1, возвращается FALSE . Если split_length больше длины строки string , то вся строка будет возвращена в первом и единственном элементе массива.
Примеры
Пример #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() производит разбивку по байтам, а не по символам, в случае использования строк в многобайтных кодировках.
Смотрите также
- chunk_split() — Разбивает строку на фрагменты
- preg_split() — Разбивает строку по регулярному выражению
- explode() — Разбивает строку с помощью разделителя
- count_chars() — Возвращает информацию о символах, входящих в строку
- str_word_count() — Возвращает информацию о словах, входящих в строку
- for
split
Разбивает строку string на массив по регулярному выражению.
С версии PHP 5.3.0 эта функция считается УСТАРЕВШЕЙ. Крайне не рекомендуется полагаться на эту возможность.
Список параметров
Регулярное выражение, чувствительное к регистру.
Если необходимо разбить строку по символам, являющимся специальными для регулярных выражений, их следует экранировать. Если вам кажется, что split() (или любая другая функция, работающая с регулярными выражениями) ведет себя неожиданно, пожалуйста, прочтите файл regex.7 , расположенный в поддиректории regex/ дистрибутива PHP. Он сохранен в формате manpage, поэтому для удобства чтения используйте команду man /usr/local/src/regex/regex.7.
Если указан параметр limit , возвращаемый массив будет содержать максимум limit элементов, причем последний элемент будет включать всю оставшуюся часть строки string .
Возвращаемые значения
Возвращает массив строк, каждая из которых является строкой, образованной разбиением строки string чувствительным к регистру регулярным выражением pattern .
Если pattern встречается n раз, результирующий массив будет содержать n +1 элементов. Например, если pattern в строке отсутствует, будет возвращен массив, содержащий 1 элемент. Само собой, это также верно в случае, когда string является пустой строкой. В случае ошибки split() возвращает FALSE .
Примеры
Пример #1 Пример использования split()
Получаем первые четыре поля строки из /etc/passwd :
Пример #2 Пример использования split()
Распознаем дату, отформатированную с использованием слешей, точек или дефисов:
// Разделителями могут быть слеши, точки или дефисы
$date = «04/30/1973» ;
list( $month , $day , $year ) = split ( ‘[/.-]’ , $date );
echo «Месяц: $month ; День: $day ; Год: $year
\n» ;
?>?php
Примечания
Замечание:
С версии PHP 5.3.0, расширение regex помечено устаревшим и заменено расширением PCRE. Вызов этой функции приведет к ошибке уровня E_DEPRECATED . Смотрите список отличий для помощи при конвертировании в PCRE.
Функция split() является устаревшей начиная с PHP 5.3.0. Предлагается использовать вместо неё функцию preg_split() . В случае, когда нет необходимости использовать регулярные выражения, эффективнее использовать explode() , которая не использует дополнительные ресурсы для разбора регулярного выражения.
Пользователям, которым необходимо эмулировать поведение @chars = split(», $str) из Perl, следует обратиться к примерам для preg_split() или str_split() .
Смотрите также
- preg_split() — Разбивает строку по регулярному выражению
- spliti() — Разбивает строку в массив с помощью регулярного выражения без учета регистра
- str_split() — Преобразует строку в массив
- explode() — Разбивает строку с помощью разделителя
- implode() — Объединяет элементы массива в строку
- chunk_split() — Разбивает строку на фрагменты
- wordwrap() — Переносит строку по указанному количеству символов
Split a comma-delimited string into an array?
I need to split my string input into an array at the commas. Is there a way to explode a comma-separated string into a flat, indexed array? Input:
Also see how to split by more than one character, like preg_split(‘/[-,\s]+/’, ‘Split-this, by dash comma and space’); for example
8 Answers 8
$myString = "9,admin@example.com,8"; $myArray = explode(',', $myString); print_r($myArray);
Array ( [0] => 9 [1] => admin@example.com [2] => 8 )
@McLosysCreative You might also like var_dump which gives more detailed information. Even more usefull is var_export($myArray, true) because it returns the output of var_dump as a string so you can store it in some log without breaking generated site.
$string = '9,admin@google.com,8'; $array = explode(',', $string);
For more complicated situations, you may need to use preg_split .
If that string comes from a csv file, I would use fgetcsv() (or str_getcsv() if you have PHP V5.3). That will allow you to parse quoted values correctly. If it is not a csv, explode() should be the best choice.
What if you want your parts to contain commas? Well, quote them. And then what about the quotes? Well, double them up. In other words:
part1,»part2,with a comma and a quote «» in it»,part3
PHP provides the https://php.net/str_getcsv function to parse a string as if it were a line in a CSV file which can be used with the above line instead of explode :
print_r(str_getcsv('part1,"part2,with a comma and a quote "" in it",part3')); Array ( [0] => part1 [1] => part2,with a comma and a quote " in it [2] => part3 )
explode has some very big problems in real life usage:
count(explode(',', null)); // 1 !! explode(',', null); // [""] not an empty array, but an array with one empty string! explode(',', ""); // [""] explode(',', "1,"); // ["1",""] ending commas are also unsupported, kinda like IE8
preg_split('@,@', $string, NULL, PREG_SPLIT_NO_EMPTY)
/** @brief wrapper for explode * @param string|int|array $val string will explode. '' return []. int return string in array (1 returns ['1']). array return itself. for other types - see $as_is * @param bool $as_is false (default): bool/null return []. true: bool/null return itself. * @param string $delimiter default ',' * @return array|mixed */ public static function explode($val, $as_is = false, $delimiter = ',') < // using preg_split (instead of explode) because it is the best way to handle ending comma and avoid empty string converted to [''] return (is_string($val) || is_int($val)) ? preg_split('@' . preg_quote($delimiter, '@') . '@', $val, NULL, PREG_SPLIT_NO_EMPTY) : ($as_is ? $val : (is_array($val) ? $val : [])); >