想要从一些逗号分隔值创建ul li

时间:2011-03-28 13:44:34

标签: php list html-lists

目前我有一些逗号分隔值,如

“橘子,苹果,馅饼”

我希望将它们变成像这样的列表

  • oranges
  • apples
  • 馅饼
希望有人可以帮助我

3 个答案:

答案 0 :(得分:8)

$data = "oranges, apples, pies";
$data = explode(',', $data);
echo '<ul>';
foreach ( $data as $item ) {
    echo '<li>', trim($item), '</li>';
}
echo '</ul>';

[讽刺=上] 对于那些正在寻找不可维护,难以阅读的代码而没有复杂的东西,如数组和循环它们的人(是的,我知道,字符串技术上是一种数组,尽管它是与数组通常意味着的不同):

$input = 'oranges, apples, pies';
$output = '';

$output = '<ul><li>';
$inputLength = strlen($input);
$skipSpaces = true;
for ( $n = 0; $n < $inputLength; ++$n ) {
    if ( $skipSpaces ) {
        if ( $input[$n] === ' ' ) {
            continue;
        }
        $skipSpaces = false;
    }
    if ( $input[$n] === ',' ) {
        $skipSpaces =  true;
        $output .= '</li><li>';
        continue;
    }
    $output .= $input[$n];
}
$output .= '</li></ul>';

var_dump($output);

答案 1 :(得分:2)

$slist = "oranges, apples, pies";
echo "<ul><li>" . str_replace(", ", "</li><li>", $slist) . "</li></ul>";  

答案 2 :(得分:1)

只会添加尚未提及的可能性:

printf(
    '<ul><li>%s</li></ul>',
    implode(
        '</li><li>',
        str_getcsv("oranges, apples, pies")
    )
);

虽然如果你没有多行并且包含字符和类似内容,str_getcsv有点矫枉过正。也可以只使用explode

又一种可能性:

echo '<ul>';
$tok = strtok("oranges, apples, pies", ',');
while ($tok !== false) {
    echo '<li>', trim($tok), '</li>';
    $tok = strtok(',');
}
echo '</ul>';

还有一个:

$dom = new DOMDocument;
$dom->appendChild(
    $dom->createElement('ul')
);
foreach(explode(',', 'oranges, apples, pies') as $fruit) {
    $dom->documentElement->appendChild(
        $dom->createElement('li', $fruit)
    );
}
$dom->formatOutput = TRUE;
echo $dom->saveXml($dom->documentElement);

最后一个:

$writer = new XMLWriter();
$writer->openURI('php://output');
$writer->startElement('ul');
foreach(explode(',', 'oranges, apples, pies') as $fruit) {
    $writer->writeElement('li', $fruit);
}
$writer->endElement();