目前我有一些逗号分隔值,如
“橘子,苹果,馅饼”
我希望将它们变成像这样的列表
答案 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();