Работая с массивами нам часто приходится манипулировать данными, делаем из строки массив и наоборот массив превышаем в строку. В текущей статье рассмотрим как можно строку разбить в массив, разбив имеете в веду, что по заданным параметрам содержимое строки разделит по разным ключам и значениям массива. Функция которая возьмет на себя разделение массива будет explode(); а вот implode(); является антонимам emplode(); по принципу работы.
Описание функции explode();
Функция занимается разбиванием строки с помощью указанного разделителя.
explode( $Разделитель, $Строка [, int $Лимит] );
$Разделитель - Переменная String играет роль разделителя, указанное в ней значение (текст или символ) будет обыскивать содержимое переменной $Строка, на наличие в ней аналогичное ему значение. Если в $Строка будет найдены такие же символы какие указаны в $Разделитель то первая часть "До разделителя" будет один элемент массива и "После разделителя" другой элемент массива.
$Строка - Любой текст без ограничения который будет подвергнут поиску на наличие в нем эквивалентного значения разделителя. После нахождения в нем текст будет разбит на разные элементы массива.
$Лимит - Если он задан, разделение строки на элементы массива будет осуществятся только в пределах лимита. Остальной текст который не прошел под ограничение лимитом будет добавлен к последнему значению массива, выводится так же вместе.
Ознакомимся с примером, у нас есть переменная которая хранит в себе название нескольких футбольных команд которые разделены между собой символом " | ", после разделения афишируем пронумерованные команды в окно браузера.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $FootballTeam = "Реал Мадрид|Барселона|Манчестер Юнайтед|Челси|Милан"; $Teams = explode("|", $FootballTeam); foreach($Teams as $TeamName) { $TeamNumber++; echo $TeamNumber.". ".$TeamName."<br />"; } // Выводим название 1 и 2 команды echo $Teams[0]."<br />"; // Реал Мадрид echo $Teams[1]."<br />"; // Барселона ?> |
Результат выполнения скрипта:
1 2 3 4 5 6 7 |
1. Реал Мадрид 2. Барселона 3. Манчестер Юнайтед 4. Челси 5. Милан Реал Мадрид Барселона |
Еще один пример который я часто принимаю в своем скрипте добавления новостей, это разделения содержимого статьи на короткую статью и полную статью. Некоторые вводят текст с начало в поле короткой статьи и уже весь текст в одеяльное поле. Всю рутину процесса можно уничтожить при помощью ББ-кода он добавляется в тот участок текста где нужно осуществить его разделение.
1 2 3 4 5 6 7 8 |
<?php $FullText = "Текст приведен для примера, тут будет короткая статья которую увидят на главной. <!--more--> После этого тега следует весь текст статьи который увидит пользователь при нажатии на - Подробнее"; $Text = explode("<!--more-->", $FullText); // Выводим короткий текст echo $Text[0]; // Остальной текст после тега <!--more--> echo $Text[1]; ?> |
Функции удобно использовать в парсингах информации, некоторые веб разработчики вместо того, чтобы создавать отельные столбцы в таблице, кладут всю информацию в одну и разделяют данные пробелом между ними. Чаще всего, в качестве данных участвуют числовые значения. Хочу сразу сказать, что такой метод хранения информации очень плох, не поленитесь и создайте логические имена для полей таблиц и храните в них соответствующие названию значения.
1 2 3 4 5 6 7 8 9 10 11 |
<?php // Допустим был запрос в базу данных и мы получили // содержимое информации о пользователе `UserData` в соответвующею переменную $UserData = "91 2012-03-29 23 1333039451"; $Data = explode(" ", $UserData); echo "ID пользователя: ".$Data[0]."<br />"; echo "Дата регистрации: ".$Data[1]."<br />"; echo "Возраст: ".$Data[2]."<br />"; echo "Последний вход: ".date("d.m.Y H:i:s", $Data[3])."<br />"; ?> |
Результат работы скрипта:
1 2 3 4 |
ID пользователя: 91 Дата регистрации: 2012-03-29 Возраст: 23 Последний вход: 29.03.2012 19:44:11 |
Если кокой либо посторонний программист начнет работать с таким видом архитектуры баз данных, он либо перепишет либо обвинит вас в криворукости и будет прав т.к. все данные должны быть распределены по логически названым переменным, полям, массивам.