如何转换<;br>';s到PHP中的(未)排序列表


How to convert <br>'s to (un)ordered list in PHP?

我有一个来自db的数组。数组具有由<br>分隔的字符串。所以我想爆炸它们并将其转换为

<ul>
    <li>...</li>
</ul> 

使用函数的结构(listIt($list)):

function listIt($list)
{
  $list = mb_convert_case($list, MB_CASE_TITLE, 'UTF-8');
  $text = explode('<br>', $list);
  $menu = '<ul>';
  foreach ($text as $li)
  {
    $menu .= '<li>' .   $li . '</li>';
  }
  return $menu . '</ul>';
}

我的阵列(rawMenu)如下:

 array (size=5)
  0 => string 'Banana<br>Cheese<br>Egg<br>Salad<br>Water<br>Juice<br>Coffee' (length=62)
  1 => string 'Soup<br>Potato<br>Chicken<br>Fish<br>Juice<br>Wine<br>Salad' (length=61)
  2 => string 'Banana<br>Cheese<br>Egg<br>Salad<br>Water<br>Juice<br>Coffee' (length=62)
  3 => string 'Soup<br>Potato<br>Chicken<br>Fish<br>Juice<br>Wine<br>Salad' (length=61)
  4 => string 'Banana<br>Cheese<br>Egg<br>Salad<br>Water<br>Juice<br>Coffee' (length=62)

问题是我传递给listIt($rawMenu[4])函数的字符串返回:

<ul>
   <li>Banana<br>Cheese<br>Egg<br>Salad<br>Water<br>Juice<br>Coffee</li>
</ul>

这是因为MB_CASE_TITLE将第一个字母转换为大写(<Br>),然后必须在Br:上拆分

$st = 'Banana<br>Cheese<br>Egg<br>Salad<br>Water<br>Juice<br>Coffee';
$list = mb_convert_case($st, MB_CASE_TITLE, 'UTF-8');
$text = explode('<Br>', $list);
$menu = '<ul>';
foreach ($text as $li){
  $menu .= '<li>' .   $li . '</li>';
}
$menu .= '</ul>';
print_r($menu);

输出:

<ul><li>Banana</li><li>Cheese</li><li>Egg</li><li>Salad</li><li>Water</li><li>Juice</li><li>Coffee</li></ul>

这里是沙箱中的工作示例。

正如@LightnessRacesinOrbit在评论中所指出的,良好的做法是交换爆炸和转换:

$st = 'Banana<br>Cheese<br>Egg<br>Salad<br>Water<br>Juice<br>Coffee';
$text = explode('<br>', $st);
$menu = '<ul>';
foreach ($text as $li){
  $menu .= '<li>' .   $li . '</li>';
}
$menu .= '</ul>';
$menu = mb_convert_case($menu, MB_CASE_TITLE, 'UTF-8');
print_r($menu);