Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Преобразовать текст в массив
Alex_r  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 41652
На форуме: 1 год, 4 месяца, 3 дня
Карма:




Всем привет. Нужна ваша помощь в написании регулярного выражения, дабы с данного текста получить нужный массив. Спасибо!

<p>Раздел содержит часто встречающиеся вопросы от клиентов, на которые мы дали исчерпывающие ответы.</p><ul id="question-answer"><li>Первый вопрос<br></li><ul><li>Первый абзац ответа на первый вопрос<br></li><li>Второй абзац ответа на первый вопрос<br></li></ul><li>Второй вопрос</li><ul><li>Первый абзац ответа на второй вопрос</li></ul><li>Третий вопрос<br></li></ul>

Array
(
[0] => Array
(
[question] => Первый вопрос
[answer] => Array
(
[0] => Первый абзац ответа на первый вопрос
[1] => Второй абзац ответа на первый вопрос
)

)

[1] => Array
(
[question] => Второй вопрос
[answer] => Array
(
[0] => Первый абзац ответа на второй вопрос
)

)

[2] => Array
(
[question] => Третий вопрос
[answer] => Array
(
)

)

)


Это сообщение отредактировал Alex_r - 12.10.2016 - 19:39


--------------------
Сервис Депозитка - Ваш депозитный помощник
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Свои варианты решения в студию.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14966
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 27 дней
Карма: 443




Alex_r, тут скорее не регулярка нужна, а работа с DOM
У тебя же это полноценный кусок HTML, с которым проще работать именно как с HTML, а не извращаться с регулярками. А в данном случае будет именно извращение с регулярками smile.gif


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Alex_r  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 41652
На форуме: 1 год, 4 месяца, 3 дня
Карма:




Цитата (sergeiss @ 12.10.2016 - 23:02)
Alex_r, тут скорее не регулярка нужна, а работа с DOM
У тебя же это полноценный кусок HTML, с которым проще работать именно как с HTML, а не извращаться с регулярками. А в данном случае будет именно извращение с регулярками smile.gif

спасибо


--------------------
Сервис Депозитка - Ваш депозитный помощник
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Alex_r  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 41652
На форуме: 1 год, 4 месяца, 3 дня
Карма:




сделал так

<p>Раздел содержит часто встречающиеся вопросы от клиентов, на которые мы дали исчерпывающие ответы.</p><ol><li>Первый вопрос<br></li><ul><li>Первый абзац ответа на первый вопрос<br></li><li>Второй абзац ответа на первый вопрос<br></li></ul><li>Второй вопрос</li><ul><li>Первый абзац ответа на второй вопрос</li></ul><li>Третий вопрос</li></ol>

preg_match("/<ol>.*<\/ol>/", $description, $list);

$lines = explode("\n", str_replace(array("<br>", "<li>", "<ul>", "</ul>", "</ol>"), array("", "\n<li>", "\n<ul>", "\n</ul>", "\n</ol>"), $list[0]));

$answer = 0;
$child = 0;

foreach($lines as $val){
if(substr($val, 0, 4) == "<ul>"){
$answer = 1;
}

if(substr($val, 0, 5) == "</ul>"){
$answer = 0;
}

if(substr($val, 0, 4) == "<li>"){
$data['accordion'][$child]['answer'] = array();

if(!$answer){
$data['accordion'][$child]['question'] = strip_tags($val);

$child++;
}else{
$data['accordion'][$child - 1]['answer'][] = strip_tags($val);
}
}
}


Это сообщение отредактировал Alex_r - 13.10.2016 - 12:57


--------------------
Сервис Депозитка - Ваш депозитный помощник
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
killer8080  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 8735
Пользователь №: 26630
На форуме: 5 лет, 9 месяцев, 2 дня
Карма: 591




$text = '<?xml encoding="utf-8" ?> 
<p>Раздел содержит часто встречающиеся вопросы от клиентов, на которые мы дали исчерпывающие ответы.</p>
<ul id="question-answer">
<li>Первый вопрос<br></li>
<ul>
<li>Первый абзац ответа на первый вопрос<br></li>
<li>Второй абзац ответа на первый вопрос<br></li>
</ul>
<li>Второй вопрос</li>
<ul>
<li>Первый абзац ответа на второй вопрос</li>
</ul>
<li>Третий вопрос<br></li>
</ul>'
;

$doc = new DomDocument();
$doc->loadHTML($text);
$ul = $doc->getElementById('question-answer');
$i = 0; $result = [];

foreach($ul->childNodes as $el) {
switch ($el->nodeName) {
case 'li':
$result[$i++]['question'] = $el->nodeValue;
break;
case 'ul':
foreach ($el->childNodes as $el2) {
if ($el2->nodeName == 'li') {
$result[$i - 1]['answer'][] = $el2->nodeValue;
}
}

break;
}
}


echo '<pre>'.print_r($result, 1).'</pre>';
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

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

Опции темы Ответ в темуСоздание новой темыСоздание опроса