сделал так
<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);
}
}
}