Php метод explode для разбиения строки с тремя примерами

Информация: символы, строки и данные

В «чистом» виде информация — это строка символов, речь или последовательность сигналов. В программировании фигурируют строки, массивы и объекты — это варианты искусственных строчных конструкций. Числа — это тоже строки, но цифр, а не символов.


Преобразовать строку в массив PHP позволяет множеством различных способов. Есть две специальных функции, которые делают это «самостоятельно»:

  • $aArr = explode(‘x’, ‘string’);
  • $aStr = implode(‘y’, $aArr).

Первая функция находит символ разделитель ‘x’ и разбивает по нему строку ‘string’. В результирующий массив попадает ровно такое количество элементов (строк), которое содержится между символами ‘x’. Символом разделителем не обязательно может выступать классические:

  • запятая;
  • точка;
  • точка с запятой.

Разделять строку можно по подстроке или по специальному сочетанию символов.

Длина строки — strlen() на PHP, длина массива — count(). В первом случае считается количество символов, во втором случае количество элементов. Поскольку символ-разделитель не входит в элементы массива, то значение count() будет равно количеству разделителей в преобразуемой строке минус один.

При обратной трансформации PHP массивы в строку преобразуются с символом-разделителем (может быть пустым), и все данные (числа и логические выражения) сливаются в одну строку. Элементом массива может быть другой массив, но этот случай программист должен исполнить особо. Функция implode() далека от рекурсии.

В этом примере нет проблем преобразовать PHP-массивы в строку до тех пор, пока среди их элементов не окажется другого массива. При преобразовании ассоциативных элементов теряется ключевая информация. В частности, элементы «слива» и «персик» будут лишены своих ключей.

Разборка и сборка строк — проверка данных

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

Обратная процедура позволит создать правильную исходную строку. Если сопоставить объем исходной информации и результат обратного преобразования, то можно делать выводы о том, в каком месте были допущены ошибки или произошла потеря данных. На PHP длина массива в контексте исходной длины строки может позволить сделать нужные выводы.

Комплексные разделители

Вывод массива PHP в строку часто используется для служебных целей. Файл конфигурации традиционно записывают построчно, а имя от значения отделяет символ равно или двоеточие.

При таком решении вывод массива на PHP делается в файл, автоматически получается разделение строк и при обратном распознавании легко получаются ассоциативные массивы.

Читая файл, программист получает строки, а разбивая каждую строку по «=» или «:», получает имя и его значение. Очень востребованная манипуляция, хотя современнее использовать XML-нотацию на том простом основании, что кроме имен и значений можно хранить и восстанавливать дополнительные данные, например, атрибуты переменных.

В примере с абзацами (например, естественный текст для построения словаря или результат парсинга для создания выборки данных) важна не конкретная процедура преобразования строки в массив, а комплексное решение для всех абзацев или блоков информации.

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

Преобразовываем массив в строку специального формата

Следующая функция также преобразует массив в строку, но эта строка будет несколько иного формата.

Что это значит? Это значит, что помимо значений элементов массива в строке, мы получим и еще кое-какую информацию. Мы увидим сколько элементов в массиве, индекс каждого элемента и число символов в нем.

Данная функция называется serialize(). В качестве параметра в скобках передается имя массива.

Давайте посмотрим ее работу на примере.

<?php
$Mass = array('Audi','Ferrari','Toyota');
$str = serialize($Mass);
echo $str;
?>

Как Вы можете видеть, формат здесь уже другой. Здесь первое, что мы видим – это число элементов массива, далее в фигурных скобках идут номер индекса элемента, число символов и само значение элемента – и так для каждого элемента массива.

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

Посмотрите на примере.

<?php
$Mass = array('Car'=>'Audi','Car1'=>'Ferrari','Car2'=>'Toyota');
$str = serialize($Mass);
echo $str;
?>

А вот и результат работы функции с ассоциативным массивом.

Для восстановления массива из строки, преобразованной при помощи функции serialize() мы можем использовать функцию unserialize().

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

В качестве параметра в скобках, нужно будет передать имя переменной, в которой лежит наша строка.

Далее мы можем распечатать массив, чтобы убедиться, что функция отработала корректно.

Давайте сделаем это из нашего последнего примера.

<?php
$Mass = array('Car'=>'Audi','Car1'=>'Ferrari','Car2'=>'Toyota');
$str = serialize($Mass);
$Mass1 = unserialize($str);
print_r ($Mass1);
?>

В итоге обратно получаем наш массив.

Strings as Arrays of Characters

Strings aren’t really arrays, but you can access the characters in a string using array syntax, as the following demonstrates:

First we use square brackets to access the third character in the string. Then we set it to a new value and display the results using .

You can access individual characters in a string using a loop. We demonstrate by using a loop to see how many times the letter (upper or lowercase) occurs in the example string:

In the loop, we inspect each character in turn, using the function to check if it is in . If it is, we increment the variable. We display the result using once outside the loop.

Find out more about and other search functions.

Although a string can be treated as an array of characters to some degree, you can’t individual characters, or apply array functions to a string.

Слияние массивов

Функции PHP позволяют свободно манипулировать массивами. Но всегда возникают задачи сделать выборку уникальных данных или найти данные в массиве.

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

Найти данные в массиве — тоже цикл, а если элементов много, то цикл будет довольно длинным и займет заметное время. Можно отправить массив в строку и при помощи функции strpos() найти вхождение требуемого элемента, но это обусловит проблему обнаружения ошибочного вхождения.

Например, искалось слово «лоток», а было найдено его вхождение в слове «молоток». Избавиться от таких ошибок можно, если все элементы массива сливать в строку по специальному разделителю, что позволит избежать неопределенности.

Если в строке оказались «» и «», то проблем с поиском не будет.

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

Объектное решение: массивы + строки

Лучшее решение, когда массив или строка самостоятельно выполняет правильное действие. Если несколько усложнить массивы и упростить строки, ведь первые — это частный случай объекта, а вторые — это традиционная сериализация, то каждый будет заниматься своим делом.


В нужный момент времени объект — это массив, а когда нужна строка, он будет строкой. При этом совершенно не обязательно иметь в объекте и массив, и строку одновременно. Можно построить уникальную структуру данных с быстрым доступом. А логику «массив» и «строка» вынести в методы объекта.

Объектно-ориентированный подход упрощает решение многих задач обработки строчной информации, позволяет не акцентировать внимание на массивах, циклах и функция обработки строк самого PHP

Разделители данных и ключи

Не следует считать разделителями точки, запятые, двоеточия и пр. Это частный случай разделения данных друг от друга. При трансформации строки на PHP многомерный массив не получится, а ассоциативным индексам неоткуда будет взяться.

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

Например, был абзац, в нем несколько предложений (разделитель «.» — точка), в предложении несколько фраз (разделители «,» — запятая, «;» — точка с запятой и «.» — точка), во фразе есть слова (разделитель » » — пробел, «,» — запятая, «;» — точка с запятой и «.» — точка).

При такой разборке на PHP многомерный массив получится легко, но алгоритм будет очень некрасивым: количество разделителей растет, а отсутствие связи между соседними абзацами гарантированно обеспечит дублирование предложений, фраз и слов.

Разбирая строки, можно сразу преобразовывать последовательности цифр в числа, а логические значения в true и false. Но это частности, ключевая информация все равно не появится, потому как ключ — это смысл, автоматом можно создать только числовой индекс.

explode

Pass a delimiter and a string to the function, and it will split the string into array elements where it finds the delimiter. The delimiter can be a single character (such as a space or a comma), or it can consist of multiple characters.

In the following example, a string contains a list of items separated by a comma and a space. We use the function to convert this list to an array by passing a delimiter string consisting of a comma and a space () as the first argument. We pass the string we want to convert as the second argument:

In our next example we use a forward slash () as a delimiter to split a path name into an array of directories:

Notice in the result that the first element and last element in the array contain empty strings. This is because nothing precedes the first forward slash or follows the last forward slash. Nonetheless, the original string is split at these points creating array elements.

If the delimiter string is not found within the string you are converting, an array of one element will be returned, and that element will contain the entire string. The function provides an optional limit parameter, in case you would like to control the number of array elements returned. Find out more in the PHP Manual.

The preg_split function is similar to explode except that it uses a regular expression to specify the delimiter. It also provides options that give more control over the array returned.

Преобразовываем массив в строку

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

Первая функция называется implode().

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

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

Давайте посмотрим все это на примере.

<?php
$Mass = array('Чай','Кофе','Молоко');
$str = implode('-',$Mass);
echo $str;
?>

Как видите, у нас есть простой массив, который мы хотим преобразовать в строку. В качестве разделителя используется «-» (тире). После преобразований мы выводим полученную строку на экран.

А вот то, что мы увидим на экране.

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

Можете самостоятельно провести такой эксперимент и создать вместо массива-списка ассоциативный массив, а потом посмотреть результат.


Абсолютно то же самое делает и функция join().

Весь код будет идентичен за исключением имени самой функции. И результат, как Вы понимаете, будет в точности таким же.

Динамика смысла

Как строки, так и массивы — это реальный смысл реальной действительности, области применения, задачи. Нет такой задачи — отправить на PHP массивы в строку. Но есть задача получить абзац (предложение, фразу, слово, число…) на базе результатов, полученных в предыдущем алгоритме.

Предыдущий алгоритм несет в себе смысл, а точное выражение этого смысла содержится в массиве. Следующий этап алгоритма — трансформация смысла в другое представление, удобное для дальнейшей обработки или применения.

Рассматривая алгоритм, как динамику смысла и преобразований данных, можно формировать надежные, понятные и эффективные преобразования.

Время, дата и метки событий

В разработке ответственных проектов, при создании объектов управления, например, временем или событиями, строка — это одно представление данных, а массив — это другое. Но в применении они эквивалентны.

Когда нужно выполнить математические или логические вычисления, программист манипулирует массивом, когда нужно сохранить данные, он использует строчный вариант.

Индексы доступа к полям базы данных — реальная практика совместного действия MySQL и PHP, массивы в строку = один индекс по строкам нескольких таблиц базы данных. Если база данных содержит десяток таблиц, а в каждой таблице строки могут быть выбраны по сочетанию имен (значений) в определенной комбинации, то сформировав массивы доступа к строкам, можно впоследствии иметь доступ к ним по алгоритму формирования индекса, а не по поиску в базе данных.

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

Выводим структуру массива

Ну и на последок рассмотрим пару функций для вывода структуры массива. Такие функции очень полезны при отладке и тестировании программ.

Первая функция скорее всего Вам знакома из прошлых уроков. Мы очень часто ее использовали, как раз для того, чтобы увидеть структуру массива.

Это функция print_r(). В скобка передается имя массива, структуру которого мы хотим вывести.

<?php
$Mass = array('Audi','Ferrari','Toyota');
echo '<pre>';
print_r ($Mass);
echo '</pre>';
?>

Думаю, здесь все понятно. Мы получаем структуру массива.

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

Давайте посмотрим.

<?php
$Mass = array('Audi',5,'Toyota',false);
echo '<pre>';
var_dump($Mass);
echo '</pre>';
?>

Я специально добавила в наш массив один целочисленный элемент и один элемент, который содержит булево значение, чтобы Вы могли оценить результаты работы функции в полной мере.

Как видите, она дает достаточно подробную информацию о нашем массиве и о его элементах, так что при отладке и тестировании не забудьте про эту функцию.

Ну вот, наверное, на сегодня и все.

Буду надеяться, что знакомства с данными функциями поможет Вам при написании кода php и работе с массивами.

Добавляйте страничку в «Избранное», чтобы информация всегда была «под рукой».

Делитесь статьей с друзьями при помощи кнопок соц. сетей, которые расположены чуть ниже, а также не забывайте подписаться на обновления блога. Впереди еще много всего интересного!

С Вами была Анна Котельникова! Жду Ваших комментариев.


С этим читают