PHP将长字符串分隔为列表

时间:2011-09-20 13:18:25

标签: php html database string html-lists

我试图在数据库中存储一堆功能。我想的格式是插入它:

这里的东西|分开的那个|更多的东西|还有一些

现在,我需要从数据库中获取它并将其放入如下列表中:

<ul>
    <li>Stuff Here</li>
    <li>Separated By That</li>
    <li>More Stuff</li>
    <li>And some more</li>
</ul>

这很容易吗?我知道我能做到:

str_replace("|", "<li>", $data);

但是那对于第一个项目和最后一个项目以及结束标记不起作用。我是否应该将我的列表插入数据库?或者这样很好,我只需要正确的代码来更好地格式化无序列表?

5 个答案:

答案 0 :(得分:5)

我认为你可以使用单行代码来做这件事(希望得到纠正),所以是的,存储你当前在数据库中的数据并编写一个小帮助函数拆分字符串并构建HTML列表。

function build_list($string) {
  $output = '<ul>';
  $items = explode('|', $string);
  foreach ($items as $item) {
    $output .= '<li>' . $item . '</li>';
  }  
  $output .= '</ul>';

  return $output;
}

答案 1 :(得分:2)

如果您想保持简单的存储方法,您可以同时注入开始和结束标记:

 str_replace("|", "</li><li>", "<li>$data</li>");

如果至少有一个$data条目,您还应该测试。

答案 2 :(得分:2)

使用“以某种方式分开”的方法几乎总是一种不好的方法。规范化数据库,以便每个特征都有行,例如

table features(
  id PK,
  Name
)

一切都变得更容易查询/维护......

答案 3 :(得分:2)

  

我正在使用VIN解码器,一旦解码了VIN,它就会给我带来巨大的影响   不同类别的功能列表,如外观,室内装饰,   安全,机械。它为我生成它,但用户将拥有   删除和编辑它们的选项。如果我做的话可能会变得非常混乱   它插入到自己的表中,如果它不存在然后尝试   与车辆匹配。

这是关系数据库运行良好的情况。你需要创建几个表来处理这个问题。

  • 您在VIN和功能之间存在one to many关系。

这表明您将拥有一个存储不同可能功能的表格。

table features (
    featureID,
    category,
    feature
)

然后,您可以拥有一个将VIN编号与功能相关联的表格:

table vin_features (
    VIN,
    featureID
)

您可能还有一个表格,其中包含特定于每个VIN的信息(可能是品牌,型号,年份?),也可能是用户选项的表格。

从长远来看,这使您的数据管理和查询变得更加容易,特别是如果您开始回答更复杂的问题。

答案 4 :(得分:1)

使用explode()将字符串拆分为数组。然后,您可以使用foreach循环生成列表。