Разбиение строки на массив php

Преобразование строк в массив 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. )

Источник

Читайте также:  Php change class of object

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. "
>

Источник

explode

Возвращает массив строк, полученных разбиением строки string с использованием separator в качестве разделителя.

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

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

Если параметр limit отрицателен, то будут возвращены все компоненты, кроме последних - limit .

Если limit равен нулю, то он расценивается как 1.

Замечание:

До PHP 8.0 функция implode() принимала параметры в любом порядке. Функция explode() никогда этого не поддерживала: убедитесь в том, что separator указан перед аргументом string .

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

Возвращает массив ( array ) строк ( string ), созданный делением параметра string по границам, указанным параметром separator .

Если separator является пустой строкой (""), explode() выбрасывает ValueError . Если separator не содержится в string , и используется отрицательный limit , то будет возвращён пустой массив ( array ), иначе будет возвращён массив, содержащий string . Если значения separator появляются в начале или в конце string , указанные значения будут добавлены как пустое значение массива ( array ), либо в первой, либо в последней позиции возвращённого массива ( array ) соответственно.

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

Версия Описание
8.0.0 explode() теперь выбрасывает TypeError , если параметр separator является пустой строкой ( "" ). Ранее вместо исключения explode() возвращала false .

Примеры

Пример #1 Пример использования 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 Пример возвращаемого значения explode()

/*
Строка, которая не содержит разделителя, будет
просто возвращать массив с одним значением оригинальной строки.
*/
$input1 = "hello" ;
$input2 = "hello,there" ;
$input3 = ',' ;
var_dump ( explode ( ',' , $input1 ) );
var_dump ( explode ( ',' , $input2 ) );
var_dump ( explode ( ',' , $input3 ) );

Результат выполнения данного примера:

array(1) ( [0] => string(5) "hello" ) array(2) ( [0] => string(5) "hello" [1] => string(5) "there" ) array(2) ( [0] => string(0) "" [1] => string(0) "" )

Пример #3 Примеры с использованием параметра limit

// положительный лимит
print_r ( explode ( '|' , $str , 2 ));

// отрицательный лимит
print_r ( explode ( '|' , $str , - 1 ));
?>

Результат выполнения данного примера:

Array ( [0] => один [1] => два|три|четыре ) Array ( [0] => один [1] => два [2] => три )

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

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

  • preg_split() - Разбивает строку по регулярному выражению
  • str_split() - Преобразует строку в массив
  • mb_split() - Разделение строк в многобайтных кодировках, используя регулярное выражение
  • str_word_count() - Возвращает информацию о словах, входящих в строку
  • strtok() - Разбивает строку на токены
  • implode() - Объединяет элементы массива в строку

User Contributed Notes 3 notes

Note that an empty input string will still result in one element in the output array. This is something to remember when you are processing unknown input.

For example, maybe you are splitting part of a URI by forward slashes (like "articles/42/show" => ["articles", "42", "show"]). And maybe you expect that an empty URI will result in an empty array ("" => []). Instead, it will contain one element, with an empty string:

$uri = '' ;
$parts = explode ( '/' , $uri );
var_dump ( $parts );

Be careful, while most non-alphanumeric data types as input strings return an array with an empty string when used with a valid separator, true returns an array with the string "1"!

var_dump(explode(',', null)); //array(1) < [0]=>string(0) "" >
var_dump(explode(',', false)); //array(1) < [0]=>string(0) "" >

var_dump(explode(',', true)); //array(1) < [0]=>string(1) "1" >

If you want to directly take a specific value without having to store it in another variable, you can implement the following:

echo $status_only = explode('-', $status)[0];

Источник

PHP Explode – How to Split a String into an Array

Kolade Chris

Kolade Chris

PHP Explode – How to Split a String into an Array

The PHP explode() function converts a string to an array. Each of the characters in the string is given an index that starts from 0. Like the built-in implode() function, the explode function does not modify the data (string).

Syntax of the explode() Function

The explode() function takes in three parameters:

The full syntax looks like this:

explode(separator, string, limit) 

Unlike implode() which works even if the separator is not provided, the explode() function won’t work without the separator. So, just like the string split into an array, the separator is required. You can use the limit parameter to specify the number of arrays expected. It is optional.

Examples of implode()

Let's say that I have the string "Hello World". If the string is passed into an explode() function, Hello takes an index of 0 in the array, and World takes an index of 1. Remember that arrays use zero-based indexing.

$str = "Hello world"; $newStr = explode(" ", $str); // We are printing an array, so we can use print_r() print_r($newStr); 

ss1-3

If you specify a limit in the explode() function, the index(es) won’t be more than that number. For example, if you specify 2, all the strings would show, but the index won’t be more than 2.

$str = "CSS, HTML, PHP, Java, JavaScript"; $newStr = explode(" ", $str, 2); // We are printing an array, so we can use print_r() print_r($newStr); 

ss2-3

You can see that the first element takes an index of 0 and the rest of the comma-separated elements take 1. The index is not more than the limit of 2 specified.

The explode() function looks at spaces in the string to split the string into an array. If you type two different words together, they are treated as one:

$str = "CSS HTMLPHP Java JavaScript"; $newStr = explode( " ", $str); // We are printing an array, so we can use print_r() print_r($newStr); 

ss5-2

You can see that HTML and PHP got ptinted together because there was no space between them.

Conclusion

This article showed you how to use the explode() function in PHP.

Note that unlike implode() which works without the separator, the separator is very important in explode() . If you don’t specify a separator, explode() won’t work as expected.

$str = "CSS, HTML, PHP, Java, JavaScript"; $newStr = explode($str, 2); // We are printing an array, so we can use print_r() print_r($newStr); 

ss3-3

And if you leave the separator as an empty string, you get an error:

Источник

Оцените статью