Разбиение и объединение строк в PHP
Иногда бывает нужно разбить одну строку на несколько строк и отправить их в массив. Очень часто такое бывает нужно, когда мы получили набор входных данных в виде одной строки, разделённых, например, пробелами. Более редко (по крайней мере, в моей практике), но тоже используется обратная операция - объединение строк в PHP. Давайте обсудим эти две задачи более подробно.
Для разбиения строки на элементы используется функция explode(), которая принимает два параметра: строку, которую необходимо разбить и разделитель. Рассмотрим функцию explode() сразу на примере:
<?php
$arr = explode("/", "Lexus/Smirnov/40");
print_r($arr);
?>
В данном примере, мы создаём массив, элементами которого становятся "Lexus", "Smirnov", "40". То есть мы, учитывая разделитель "/", разбили эту строку на несколько и записали их в массив. Существует так же и операция разбиение строки на элементы и мгновенная запись их в переменные:
<?php
list($car, $owner, $age) = explode("/", "Lexus/Smirnov/40");
echo $car."<br />";
echo $owner."<br />";
echo $age."<br />";
?>
То есть в данном примере, мы создали три переменные, в каждую из которых записали соответствующее значение.
Теперь о применении данной функции. В своё время я реализовывал задачу поиска по сайту. И мне нужно было сформировать из GET-запроса, полученного из формы, запрос к базе данных, чтобы извлечь оттуда подходящие записи. Проблема была в том, что ведь могут искать несколько слов сразу, например, "создать сайт быстро". И нужно вывести все материалы со словами "создать", либо "сайт", либо "быстро". И мне приходилось использовать функцию explode(), а в качестве разделителя брался пробел. А уже затем я формировал запрос к базе данных (разумеется, с количеством OR зависящем от количества слов, либо AND, если пользователь потребовал вхождение всех слов) и извлекал подходящие записи из таблицы базы данных. Вообще, задача была на порядок тяжелее, но тут я привёл Вам её кусок, чтобы Вы поняли, что бывают ситуации, когда без этой функции очень трудно работать.
Для объединения строк в PHP имеется функция implode(), которая принимает тоже два параметра: разделитель и массив:
<?php
$arr = array(15, 10, 1985);
$str = implode(".", $arr);
echo $str;
?>
В результате получится строка: "15.10.1985". Думаю, что здесь всё прозрачно.
Скажу честно, я не помню, когда эту функцию использовал (может быть, вообще не использовал), но применение для неё определённо имеется. Например, первое, что приходит в голову - это получить несколько значений, соответствующих, дню рождения пользователя. И чтобы вывести его день рождения в любом формате, можно с помощью функции implode() тут же преобразовать полученные значения в строку (с любым разделителем) и дальше уже выводить только строку, а не соединять каждый раз все значения.
Вот и всё, что касается разбиения и объединения строк в PHP.
-
- Михаил Русаков
Комментарии (19):
в функции explode('http://myrusakov.ru/', "Lexus/Smirnov/40"); вместо знака / отображет ссылку на твой сайт.
Ответить
Спасибо большое! Уже подправил.
Ответить
Михаил, добрый день! Не могу разобраться с проверкой данных. Есть два массива данных, которые получены с помощью метода "explode", введенных через "/". Выполняю проверку - количество элементов в 1 массиве должно быть равно количеству элементов во 2-ом массиве "if (count($hum1)!=count($indicator1)) {echo "Проверьте правильность вводимых данных. Количество подразделений должно быть равно количеству показателей.";} else { основной алгоритм". Получается следующая ситуация: если я ввожу в 1 массив 13/15/17/18, а во второй 99/98/96/, то выполняется основной алгоритм с ошибкой по 4 элементу. Если же во 2-ой массив ввожу 99/98/96, то выходит сообщение об ошибке заложенное в программе. Разница в одном "/". Значит если я ввел "/", но не ввел сам показатель, то php присваивает ему 0? Или как? Как правильно проверять в данном случае? Спасибо!
Ответить
Надо проверять не количество, а сами элементы. А слеш действительно добавит новый элемент, который будет пустой строкой.
Ответить
Я правильно понимаю, что нужно в цикле for перебирать все элементы и функцией isset проверять их наличие? А как же мне проверить их общее количество? Соответствие количества главнее.
Ответить
Не isset(), а просто значение. И да, через цикл.
Ответить
Михаил, добрый день! Я правильно вас понял if ($hum1[$i]== 0)?
Ответить
Да, правильно.
Ответить
Михаил, спасибо! Все получилось! Подскажите, каким образом можно передать информацию из php в html? Читать ваши уроки по порядку не получается (много забывается сразу), поэтому изучаю php по мере решения задач. Спасибо!
Ответить
<?php echo "Вывести в HTML";?> А для закрепления материала нужно выполнять упражнения, а просто читать - толку точно не будет.
Ответить
Ну так я и выполняю упражнения, только свои. У вас на сайте, к сожалению, не нашел упражнений. Или я чего то не увидел?
Ответить
На сайте упражнений нет, они есть в этом курсе: http://srs.myrusakov.ru/kurs
Ответить
А мне кажется это хорошая идея сделать на сайте тесты для новичков примерно такие же как в курсе...почему вы не отреогировали?
Ответить
Михаил, добрый день! Я немного неправильно сформулировал свой вопрос. Есть форма, которая передает данные в php. Там данные обрабатываются и выводятся на форму html. Мне нужно совместить две формы html в одну. Т.е. сверху ввожу, нажимаю "рассчитать" и снизу получаю ответ. Как передать информацию из php в ту же форму, из которой взяты первичные данные.
Ответить
Раз хотите чтобы Вам именно в html выводилось, можете использовать javascript http://myrusakov.ru/javascript-post.html
Ответить
А какие еще есть варианты? У меня блог на WP. Есть страничка, в которой поля для ввода данных. Есть возможность для вывода прямо на страницу?
Ответить
Вы и html всё хотите оставить, и с javascript не хотите связываться? Ну уж извитите, таких простых решений не бывает.
Ответить
Михаил, при чем тут "не хотите связываться"? Я просто узнаю у вас все возможные варианты. Вы специалист, я новичок. Мне кажется это нормально, когда человек интересуется всеми возможными вариантами! И никто не ждет готовых решений! Если не хотите отвечать, так не отвечайте. А уж если, сделали возможность задавать вопросы, то тогда отвечайте без сарказма. Это же диалог! Зачем же показывать свое превосходство?!
Ответить
Извиняюсь, если прозвучало грубо. Просто вопрос странный - html по определению преставляет собой статику, тут ничего не поделать. А лучше воспользоваться javascript, например. Это не так сложно как может показаться на первый взгляд, да и по ссылке выше уже фактически готовое решение.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.