Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

25.5. Деление и соединение строк

РНР способен производить разнообразные преобразования со строками, к этим преобразованиям также можно отнести деление и соединение строк. За реализацию этих операций отвечают следующие функции:

• explode(),

• implode(),

• join(),

• strtok().

Функция explode() разбивает строки на Чтобы разбить заданную строку, необходимо указать, относительно чего будет осуществляться разделение. Например, возможно множество вариантов: относительно пробелов, символов и т.д. Синтаксис функции explode():

array explode (string separator, string string [, int limit])

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

Параметр limit был добавлен в РНР 4.0.1.

Приведем пример:

<?php

// первый блок

$part = "Часть1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7";

$piec = explode(" ", $part);

print_r($piec);

echo "<br>";

// второй блок

$part1 = "Часть 1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7";

$piec1 = explode("т", $part1);

print_r($piec1);

echo "<br>";

// третий блок

$part2 = "Часть 1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7";

$piec2 = explode("ц", $part2);

print_r($piec2);

echo "<br>";

?>

Данную программу можно разделить на три блока. В первом блоке происходит разделение строки с учетом пробела. Функция explode() будет осуществлять исследование строки, проверяя последовательно каждый символ. Как только она найдет пробел, автоматически произойдет перенос указанного участка символов в массив. Затем функция продолжает проверять строку. После того как найдены все пробелы, будет создан массив символов разделенного предложения.

Во втором блоке происходит практически то же самое, только функция осуществляет поиск не по пробелу, а по букве «т». Это приведено для того, чтобы показать вам, что предложение можно разделить не только по словам, как кажется на первый взгляд, но и по символам с учетом указанного символа в строке параметров separator.

Третий блок программы приведен для того, чтобы вы могли сравнить, что произойдет, если функция осуществит разделение строки, и что будет происходить, если функция не найдет указанного символа. В результате работы этой функции на экран будет выведено:

Array ([0] => Часть1 [1] => Часть2 [2] => Часть3 [3] => Часть4 [4] => Часть5 [5] => Часть6 [6] => Часть7)

Array ([0] => Час [1] => ь1 Час [2] => ь2 Час [3] => ь3 Час [4] => ь4 Час [5] => ь5 Час [6] => ь6 Час [7] => ь7)

Array ([0] => Часть 1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7)

Каждая отдельная строка соответствует блоку. Во второй строке деление осуществлялось при помощи символа «т». Обратите внимание, что этого символа нет.


ВНИМАНИЕ

В процессе деления функция explode() просто удаляет тот символ, относительно которого осуществляется деление строки. Другими словами, после того как функция удаляет символ, осуществляется процесс записи содержимого массива.


Теперь осуществим обратный процесс. Все, что мы делали при помощи функции explode(), вернем обратно, т. е. соединим элементы полученного ранее массива в строку. Для решения этой задачи идеально подходит функция implode(). Она имеет следующий синтаксис:

string implode(string glue, array pieces)

В качестве параметра glue необходимо подставлять символ, который будет соединять два элемента массива. Все аналогично функции explode(), только в обратном порядке. Параметр pieces отвечает за массив, элементы которого мы собираемся соединить.

Приведем пример:

<?php

echo "<h3>Осуществляется процесс деления строки при помощи функции explode()</h3><br>";

$part = "Часть1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7";

$piec = explode(" ", $part);

print_r($piec);

echo "<br>";

$part1 = "Часть1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7";

$piec1 = explode("т", $part1);

print_r($piec1);

echo "<br>";

$part2 = "Часть1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7";

$piec2 = explode("ц", $part2);

print_r($piec2);

echo "<br><br>";

echo "<h3>Осуществляется процесс соединения при помощи функции implode () </h3><br>";

$string = implode(" ", $piec);

$string1 = implode("т", $piec1);

$string2 = implode("ц", $piec2);

echo $string."<br>";

echo $string1."<br>";

echo $string2."<br>";

?>

В начале примера осуществляется процесс разделения строки на массив символов, затем при помощи функции implode() выполняется обратный процесс. Обратите внимание, как происходит установление параметров этой функции и что получается в результате:

Осуществляется процесс деления строки при помощи функции explode()

Array ([0] => Часть1 [1] => Часть2 [2] => Часть3 [3] => Часть4 [4] => Часть5 [5] => Часть6 [6] => Часть7)

Array => Час [1] => Час [2] => ь2 Час [3] => ь3 Час [4] => ь4 Час [5] => ь5 Час [6] => ь6 Час [7] => ь7)

Array ([0] => Часть1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7)

Осуществляется процесс соединения при помощи функции implode()

Часть1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7

Часть1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7

Часть1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7

Как видно, все три строки приняли первоначальный вид.

Функция join() является полной копией функции implode(). Синтаксис этих функций аналогичный. Неизвестно, для чего необходимо было создавать две идентичные функции. Возможно потому, что функция implode() является довольно-таки старой и разработчики РНР решили ввести новую фикцию. Вероятно, с появлением новых версий языка разработчики смогут просто добавить какие-либо параметры и функция станет отличной от предыдущей, но довольно-таки знакомой разработчикам.

Если есть необходимость разделить строку на определенное количество символов (например, с пробелом в качестве разделителя), то для этого используют функцию strtok(). Ее синтаксис:

string strtok(string argl, string arg2)

Первый параметр функции strok () — arg1 указывает разделитель, второй параметр — arg2, указывает непосредственно строку, которую нужно разделить при помощи функции strtok().

Следует отметить, что только первый вызов функции strtok() использует строковый аргумент. Для каждого последующего вызова функции strtok() необходим только разделитель, так как это позволяет контролировать положение в текущей строке.

Чтобы разбить новую строку, нужно еще раз вызвать strtok().


СОВЕТ

Вы можете вставлять несколько разделителей в параметр. Строка будет разделяться при обнаружении любого из указанных символов.


Также будьте внимательны к разделителям «0». Это может вызвать ошибку в определенных выражениях.

Рассмотрим пример:

<?php

$part = "Часть1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7";

echo $part."<br>";

$piec = strtok($part, " ");

while ($piec) {

    echo $piec;

    $piec = strtok(" ");

}

?>

Рассмотрим эту же строку и произведем процесс деления, учитывая, что разделителем у нас будет служить обычный пробел. Результат скрипта будет следующим:

Часть1 Часть2 Часть3 Часть4 Часть5 Часть6 Часть7

Часть1Часть2Часть3Часть4Часть5Часть6Часть7

Как видно на первый взгляд, это две строки, хотя на самом деле так сказать нельзя. Первая совокупность слов действительно представляет строку, так как у нее существуют положенные пробелы между словами. А нижняя — просто последовательность символов, так как отсутствуют пробелы между словами, хотя на самом деле они Таким способом можно осуществлять любое разбиение строк с учетом необходимого разделителя.

Описанные выше функции деления и сложения строк используются в РНР 3 и РНР 4.

<< Предыдущий параграф Следующий параграф >>
Оглавление