preg replace — php конвертирует текстовый список в html список

У меня есть столбец таблицы, который содержит список элементов, разделенных тегом «br» (без новых строк).

Я получаю эти данные и конвертирую теги br в новые строки, как определено ниже.

$nlformat = str_replace("<br>","\n",$mem['mem_services']);

Я также пишу файл в этом PHP-скрипте, который превратит этот список в HTML-список с тегами «li». Это легко, НО, если в списке есть две последовательные новые строки «\ n \ n», я хочу завершить первый список и создать второй список следующим образом …

<ul>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>

У меня проблема с указанием двух последовательных новых строк в следующей переменной. Ниже приведен лишь один из множества примеров из других ответов на этот сайт. Никто из них не работает

$newul = preg_replace("/\r\n\r\n|\n\n|\r\r/", "</li></ul><ul><li>", $nlformat);

Кто-нибудь знает почему. Может быть, это как-то связано с переменной $ nlformat.

В текущем примере я не получаю никаких изменений в $ nlformat, т.е.

item
item
item

item
item
item

1

Решение

Мой подход к этому вопросу,
У меня есть строка с \ n символом между ними. Сначала я создам отформатированный массив из него, а затем соберу html из него. Так что вы можете использовать часть кода, которая связана с вашей проблемой

Пожалуйста, попробуйте этот способ.

$nlFormat="item\nitem\nitem\n\nitem\nitem\nitem";
$tmp_arr1= explode("\n\n",$nlFormat);
$final_arr=array();
// now $tmp_arr1 has n number of sections;
foreach($tmp_arr1 as $section){
$final_arr[]= explode("\n",$section);
}

//var_dump($final_arr);

Теперь давайте создадим HTML

$html="";
foreach($final_arr as $section){
$html.="<ul><li>";
$html.=implode("</li><li>",$section);
$html.="</li></ul>";
}
echo $html;

Надеюсь, это поможет вам

1

Другие решения

Других решений пока нет …