[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Преобразовать текст в массив
Alex_r
Всем привет. Нужна ваша помощь в написании регулярного выражения, дабы с данного текста получить нужный массив. Спасибо!

<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
(
)

)

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

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

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

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

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

спасибо
Alex_r
сделал так

<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);
}
}
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.