Разбиение строк
Решение
Если в качестве разделителя частей строк выступает строковая константа, то следует применять функцию explode():
$words = explode(' ','My sentence is not very complicated');
Функция split() или функция preg_split() применяются, если при описании разделителя требуется регулярное выражение POSIX или Perl:
$words = split(' +','This sentence has some extra whitespace in it.');
$words = preg_split('/\d\. /','my day: 1. get up 2. get dressed 3. eat toast');
$lines = preg_split('/[\n\r]+/',$_REQUEST['textarea']);
В случае чувствительного к регистру разделителя применяется функция spliti()> или флаг /i в функции preg_split():
$words = spliti(' x ','31 inches x 22 inches X 9 inches');
$words = preg_split('/ x /i','31 inches x 22 inches X 9 inches');
Обсуждение
Простейшим решением из всех приведенных выше является использование explode(). Передайте ей разделитель строки, саму строку, которую необходимо разделить, и в качестве необязательного параметра предельное количество возвращаемых элементов:
$dwarves = 'dopey,sleepy,happy,grumpy,sneezy,bashful,doc';
$dwarf_array = explode(',',$dwarves);
Теперь переменная $dwarf_array – это массив из семи элементов:
print_r($dwarf_array);
Array
(
[0] => dopey
[1] => sleepy
[2] => happy
[3] => grumpy
[4] => sneezy
[5] => bashful
[6] => doc
)
Если заданный предел меньше количества возможных частей, то последняя часть содержит все остальное:
$dwarf_array = explode(',',$dwarves,5);
print_r($dwarf_array);
Array
(
[0] => dopey
[1] => sleepy
[2] => happy
[3] => grumpy
[4] => sneezy,bashful,doc
)
Функция explode() трактует разделитель строки буквально. Если разделитель строки определяется как запятая с пробелом, то данная функция делит строку по пробелу, следующему за запятой, а не по запятой или пробелу. Функция split() предоставляет большую гибкость. Вместо строкового литерала в качестве разделителя она использует регулярное выражение POSIX:
$more_dwarves = 'cheeky,fatso, wonder boy, chunky,growly, groggy, winky';
$more_dwarf_array = split(', ?',$more_dwarves);
Это регулярное выражение разделяет строку по запятой, за которой следует необязательный пробел, что позволяет правильно определить всех новых гномов. Таким образом, пробелы в их именах не разделяют их на части, но каждое имя выделяется независимо от того, отделяется ли оно с помощью запятой «,» или с помощью запятой с пробелом «, »:
print_r($more_dwarf_array);
Array
(
[0] => cheeky
[1] => fatso
[2] => wonder boy
[3] => chunky
[4] => growly
[5] => groggy
[6] => winky
)
Существует функция preg_split(), которая подобно функции split() использует Perl-совместимые регулярные выражения вместо регулярных выражений POSIX. Функция preg_split() предоставляет преимущества различных расширений регулярных выражений в Perl, а также хитрые приемы, такие как включение текста-разделителя в возвращаемый массив строк:
$math = "3 + 2 / 7 - 9";
$stack = preg_split('/ *([+\ - \/*]) */',$math,-1,PREG_SPLIT_DELIM_CAPTURE);
print_r($stack);
Array
(
[0] => 3
[1] => +
[2] => 2
[3] => /
[4] => 7
[5] => -
[6] => 9
)
Разделитель-регулярное выражение ищет математические операторы (+, - , /, *), окруженные необязательными начальными или завершающими пробелами. Флаг PREG_SPLIT_DELIM_CAPTURE приказывает функции preg_split() включить совпадения как часть разделителя-регулярного выражения, заключенного в кавычки, в возвращаемый строковый массив. В кавычках только символы математических операций, поэтому возвращенный массив не содержит пробелов.
Комментарии:
Комментариев нет
|
|
|