Php разбиение строки на подстроки. Разбиение строк

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали, что такое функции в php . В данной короткой статье я бы хотел поговорить о двух наиболее часто используемых функциях при программировании сценариев на PHP. Это функции explode() и implode() . Функция explode() служит для разбиения строки на части, причем разбиение идёт по определенному разделителю.

Функция implode() служит для объединения строк в одну, вставляя между ними разделитель. Синтаксис у функции explode() следующий:

List explode(string separator, string str1, int limit)

В данном случае мы передаём строку str1 , функция ищет в данной строке разделитель separator , и по нему разбивает строку. Также, если указан параметр limit , то строка будет разбита на limit слов. Чтобы было понятнее давайте на примере рассмотрим данную функцию:

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

В данном случае мы разбили строку по разделителю ABC . Так как мы знаем, что в строке 4 города, то мы все 4 города распределили по переменным.

Работа функции implode() полностью противоположна работе функции explode() . Давайте используем список городов и снова объединим его в одну строку, но используя уже другой разделитель:

Обязательно проверьте работу данного скрипта.

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

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

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

arrays split explode (9)

Что вы пытаетесь достичь? Вы можете обращаться к символам в строке, как массив:

$s = "abcd"; echo $s;

печатает " a "

У меня есть строка, такая как:

и нужно разделить КАЖДЫЙ символ в массив.

Я, черт возьми, пытался:

Explode("", "123545789");

Но это дало мне очевидное: Предупреждение: никакой разграничитель, определенный в взрыве) ..

Как мне это понять? Я не вижу никакого метода, особенно просто функцию

Попробуй это:

$str = "Hello Friend"; $arr1 = str_split($str); $arr2 = str_split($str, 3); print_r($arr1); print_r($arr2);

Вышеприведенный пример выводит:

Array ( => H => e => l => l => o => => F => r => i => e => n => d) Array ( => Hel => lo => Fri => end)

$array = str_split("$string");

будет работать очень хорошо, но если вы хотите сохранить специальные символы в этой строке, и вы хотите сделать с ними некоторые манипуляции, THAN я бы использовал

Do { $array = mb_substr($string, 0, 1, "utf-8"); } while ($string = mb_substr($string, 1, mb_strlen($string), "utf-8"));

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

Попробуй это:

$str = "546788"; $char_array = preg_split("//", $str, -1, PREG_SPLIT_NO_EMPTY);

str_split может сделать трюк. Обратите внимание, что строки в PHP можно получить так же, как в массиве символов, в большинстве случаев вам не нужно разделить строку на «новый» массив.

Вот пример, который работает с многобайтовыми (UTF-8) строками.

$str = "äbcd"; // PHP 5.4.8 allows null as the third argument of mb_strpos() function do { $arr = mb_substr($str, 0, 1, "utf-8"); } while ($str = mb_substr($str, 1, mb_strlen($str), "utf-8"));

Это также можно сделать с помощью preg_split() (preg_split("//u", $str, null, PREG_SPLIT_NO_EMPTY)), но в отличие от вышеприведенного примера, который работает почти так же быстро, независимо от размера строки, preg_split() быстро с небольшими строками, но намного медленнее с большими.

Если вы хотите разбить строку, лучше всего использовать:

$array = str_split($string);

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

Explode("" ,$string);

Где вы можете передать разделитель в первой переменной внутри взрыва, например:

Explode(",",$string);

$array = str_split("0123456789bcdfghjkmnpqrstvwxyz");

str_split принимает необязательный второй параметр, длину блока (по умолчанию 1), поэтому вы можете делать такие вещи, как:

$array = str_split("aabbccdd", 2); // $array = aa // $array = bb // $array = cc etc ...

Вы также можете получить части своей строки, рассматривая ее как массив:

$string = "hello"; echo $string; // outputs "e"

Я просто хотел бы сказать, что у меня есть определенный Object, который имел переменные атрибуты (это было в основном сопоставление таблицы, и я менял столбцы в таблице, поэтому атрибуты в объекте, отражающие таблицу, также будут меняться

Class obj { protected $fields = array("field1","field2"); protected $field1 = array(); protected $field2 = array(); protected loadfields(){} // This will load the $field1 and $field2 with rows of data for the column they describe protected function clearFields($num){ foreach($fields as $field) { unset($this->$field[$num]); // This did not work the line below worked unset($this->{$field}[$num]); // You have to resolve $field first using {} } } }

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

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

Предположим, что у вас есть фраза «Hello, World!» и из нее вам необходимо получить вторую часть, то есть «World!». Конечно, эту задачу можно решить несколькими способами, но разбивка строки и получение из нее нужной части также является вариантом решения.

И как это можно сделать, я сейчас расскажу.

Как разбить строку на массив на PHP?

В PHP разбиение строки на массив осуществляется с помощью функции «explode » – ею, собственно, мы и воспользуемся.

Реализация:

Что здесь что?

На самом деле, вся «соль» здесь находится в третьей строке. Здесь мы указываем ориентир, по которому нужно разбить строку (в нашем случае – это запятая), и уже далее просто получаем нужный нам кусок строки, а поскольку нумерация в PHP начинается с нуля (а нулевая часть это «Hello»), то мы с вами указываем «$content_new["1"] » – второй элемент.

Как разбить строку на массив на JavaScript?

На JavaScript эти же задачи решаются с помощью метода «split »:

var content = "Hello, World!"; var content_new = content_new.split(","); alert(content_new);

Обратите внимание , что ориентир (то есть то, как нам нужно разбивать строку) вы задаете сами. В нашем случае это была запятая, в вашем же – это может быть число или, например, даже слово.

(PHP 4 >= 4.0.1, PHP 5)

spliti — Split string into array by regular expression case insensitive

Description

spliti (string $pattern , string $string [, int $limit = -1 ]) : array

Splits a string into array by regular expression.

This function is identical to split() except that this ignores case distinction when matching alphabetic characters.

Parameters

Case insensitive regular expression.

If you want to split on any of the characters which are considered special by regular expressions, you"ll need to escape them first. If you think spliti() (or any other regex function, for that matter) is doing something weird, please read the file regex.7 , included in the regex/ subdirectory of the PHP distribution. It"s in manpage format, so you"ll want to do something along the lines of man /usr/local/src/regex/regex.7 in order to read it.

The input string.

If limit is set, the returned array will contain a maximum of limit elements with the last element containing the whole rest of string .

Return Values

Returns an array of strings, each of which is a substring of string formed by splitting it on boundaries formed by the case insensitive regular expression pattern .

If there are n occurrences of pattern , the returned array will contain n +1 items. For example, if there is no occurrence of pattern , an array with only one element will be returned. Of course, this is also true if string is empty. If an error occurs, spliti() returns FALSE .

Examples

This example splits a string using "a" as the separator:

Example #1 spliti() example

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

// Пример 1 $pizza = "кусок1 кусок2 кусок3 кусок4 кусок5 кусок6"; $pieces = explode(" ", $pizza); echo $pieces; // кусок1 echo $pieces; // кусок2 // Пример 2 $data = "foo:*:1023:1000::/home/foo:/bin/sh"; list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data); echo $user; // foo echo $pass; // *

Разбить строку на массив по регулярному выражению

Если возможностей explode() недостаточно, то можно использовать более мощную функцию: preg_split () . Она позволяет разбить строку не по фиксированному набору символов, а по

Пример из документации:

// разбиваем строку по произвольному числу запятых и пробельных символов, // которые включают в себя " ", \r, \t, \n и \f $keywords = preg_split("/[\s,]+/", "hypertext language, programming"); print_r($keywords);

Результат:

/* Array ( => hypertext => language => programming) */

Преобразовать строку в массив по количеству символов

Функция str_split() преобразует строку в массив, разбивая ее на элементы с заданным количеством символов. Хотите узнать как ее использовать? Посмотрите документацию.

$str = "Hello Friend"; $arr2 = str_split($str, 3); print_r($arr2)