Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Конверитировать строку в многомерный массив
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
assd
Отправлено: 23 Мая, 2013 - 16:46:31
Гость
Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Спасибо, классно, а если вместо val будет "Что-то написано" или http://test.com, тогда немножко нужно переделать регулярное выражени (я просто в них не силен).
EuGen
Отправлено: 23 Мая, 2013 - 17:05:40
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Поскольку разбиение идёт по пробельному символу, то присутствие пробелов в значении недопустимо.
Насчёт точек - если они могут присутствовать в значении, то регулярными выражениями слишком громоздко этот контекст разбирать будет. Вероятно, подойдёт:
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Пишите что угодно, кроме символов, по которым идёт разбиение (пробел в Вашем случае). Можно и регулярным выражением всё собрать в нужный массив, вот только это будет более громоздко, чем разбивать напрямую.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
assd
Отправлено: 23 Мая, 2013 - 17:25:42
Гость
Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Спасибо за помощь)
DelphinPRO
Отправлено: 23 Мая, 2013 - 17:26:03
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
ваша строка очень похожа на синтаксис ini-файла
точнее на "продвинутый" ini-файл (с многоуровневыми вложениями).
откуда она берётся?
----- Чем больше узнаю, тем больше я не знаю.
assd
Отправлено: 27 Мая, 2013 - 13:58:49
Гость
Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Цитата:
откуда она берётся
незнаю, просто было задание распарсить
А можете объяснить принцып действия метода?
Я так понимаю, parse_str парсит строку и записывает в массив $rgData. Что делает join?
EuGen
Отправлено: 27 Мая, 2013 - 14:10:42
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
assd пишет:
Что делает join
Известно что - он "склеивает" массив в строку при помощи указанного разделителя. Это нужно потому, что parse_str ожидает строку, как если бы она была передана в качестве URI (например, при вызове скрипта через HTTP-метод GET). Поэтому алгоритм, реализованный в тех строках - таков:
0. Разбить строку в массив по данному разделителю (в Вашем случае это пробельные символы)
1. Обработать каждый элемент получившегося массива, чтобы он принял вид, который будет интерпретирован как индексирование в PHP (заменяем точки на символы "[" и "]" в соответствии с синтаксисом PHP)
2. Соединить уже обработанные элементы-строки воедино через "&" с помощью join
3. Разобрать получившуюся строку через parse_str
В принципе, исходная строка сначала разбивается, а потом склеивается - для удобства, чтобы каждый элемент полученного массива был своим же контекстом - это делает замену пробелов/точек на соответствующие элементы синтаксиса PHP намного проще. Но можно обойтись и без разбиения, заменяя регулярным выражением. Выше я уже писал, что оно будет более громоздим, чем подход с разбиением.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
assd
Отправлено: 27 Мая, 2013 - 15:10:24
Гость
Покинул форум
Сообщений всего: 113
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
Цитата:
Обработать каждый элемент получившегося массива, чтобы он принял вид, который будет интерпретирован как индексирование в PHP (заменяем точки на символы "[" и "]" в соответствии с синтаксисом PHP)
А зачем это нужно?
DelphinPRO
Отправлено: 27 Мая, 2013 - 15:13:34
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.