Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбивка текста в массив 
V
    Опции темы
DioNiR
Дата 14.4.2012, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 30.12.2006

Репутация: нет
Всего: нет



Всем Здрасте smile

Есть такая проблема smile

Допустим мы имеем текст:
Код

$str = '
    [Tag]
        111111111
        [Tag]
            222222222
            [Tag]
                333333333
                [Tag]
                    444444444
                [/Tag]
            [/Tag]
        [/Tag]
    [/Tag]';


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

Если брать простой регуляркой типо:
Код
"'\[Tag\](.*?)\[/Tag\]'is"

То вхождение будет до первого [/Tag]. 
Но мне надо чтоб были все.


Собственно вопрос как этот текст превратить в массив с такими же вхождениями.

Отмечу что не обязательно кодом smile
Можно просто натолкнуть меня на мысль, или рассказать как решается проблема

--------------------
Думали это конец? Ха, всё только начинается.
PM MAIL   Вверх
Fortop
Дата 14.4.2012, 06:30 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Если текст именно такой, то

замените все '[Tag]' на ',array('
'[/Tag]' на ')'

затем сделайте trim($str,',') чтобы убрать первую запятую

и добавьте в начало строки '$myVar = '  а в конец ';'

После чего eval(строка)


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Sanchezzz
Дата 14.4.2012, 10:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



я бы переделал тег в <div> или <tag> str_replace
и воспользовался классом 
http://habrahabr.ru/post/110112/
под ваши задачи 
в инструкции не написано что если текст приходит битым то нужно  чтобы html код был полностью, с кодировкой в метотегах

массив получится немного другим но с вложенностью

это теория но должно получится и главное все без eval ))


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Sanchezzz
Дата 14.4.2012, 11:06 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



тока проверил массив не такой строится 


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Fortop
Дата 14.4.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Sanchezzz, попробуйте думать что ли.
Иногда бывает полезно.
В данном конкретном случае eval вполне решает вопрос.

Код к вычислению
Код

$myVar = array(
        111111111
        ,array(
            222222222
            ,array(
                333333333
                ,array(
                    444444444
                )
            )
        )
    );


дамп переменно $myVar после eval
Код

array(2) {
  [0]=>
  int(111111111)
  [1]=>
  array(2) {
    [0]=>
    int(222222222)
    [1]=>
    array(2) {
      [0]=>
      int(333333333)
      [1]=>
      array(1) {
        [0]=>
        int(444444444)
      }
    }
  }
}




--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Sanchezzz
Дата 15.4.2012, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Fortop eval это зло и глобал тоже зло вполне есть способы написания сладкого решения...
А знаете что произойдет если в массиве будет содержатся функция аля sql атака
вот поэтому мой минус вам в ответ обоснованный


Это сообщение отредактировал(а) Sanchezzz - 15.4.2012, 11:43


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Fortop
Дата 15.4.2012, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Sanchezzz, читать умеем?

Рекомендую перечитать подробнее то, что я написал.
Цитата(Fortop @  14.4.2012,  06:30 Найти цитируемый пост)
Если текст именно такой

Если автор пытается таким образом обрабатывать что-то другое, то ССЗБ.


При всем этом, мой вариант работает, а ваши тыкания пальцем в небо нет.

Цитата(Sanchezzz @  15.4.2012,  11:37 Найти цитируемый пост)
А знаете что произойдет если в массиве будет содержатся функция аля sql атака

Охо-хо smile ну просветите нас темных smile Заодно примеры sql-атак (видимо sql-injection подразумевались) приведете.

И может расскажете, при каких условиях с globals начинаются проблемы?
Или вы из категории тех, кто взял не пониманием, а заучиванием?


Это сообщение отредактировал(а) Fortop - 15.4.2012, 16:34


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Sanchezzz
Дата 15.4.2012, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Цитата

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

Цитата

И может расскажете, при каких условиях с globals начинаются проблемы?
Или вы из категории тех, кто взял не пониманием, а заучиванием?


Глобальную переменную может случайно переопределить. Получим сложно отлавливаемую ошибку. 
Без global улучшается читабильность кода. 
Также другой кодер копаясь вашем коде может  не понять откуда эта переметная появилась
Также глобальные переменные всегда весят в памяти когда нежели локальные освобождаются (люблю экономить каждый байт так легче на душе  )
Также я очень много работал с сайтами написанных времен PHP4 и когда global у программистах был как икона всюду и везде использовался.

Лично мое мнение код содержащий global,eval столь ужасен что можно приравнять govnoкоду.

Это сообщение отредактировал(а) Sanchezzz - 15.4.2012, 21:54


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Aliance
Дата 16.4.2012, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



DioNiR, поиск в гугле по словам "жадность квантификатора" должна решить проблему с регулярными выражениями.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0780 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.