我要分割的字符串是$item['category_names']
,例如包含Hair, Fashion, News
我目前有以下代码:
$cats = explode(", ", $item['category_names']);
foreach($cats as $cat) {
$categories = "<category>" . $cat . "</category>\n";
}
我希望$categories
的结果如下所示,以便我可以在某个地方回复它。
<category>Hair</category>\n
<category>Fashion</category>\n
<category>News</category>\n
不确定我是否正确地采取了这种方式?
答案 0 :(得分:14)
在您的代码中,您将在每次迭代中覆盖$ categories变量。正确的代码如下:
$categories = '';
$cats = explode(",", $item['category_names']);
foreach($cats as $cat) {
$cat = trim($cat);
$categories .= "<category>" . $cat . "</category>\n";
}
更新:正如@Nanne建议的那样,仅在','
上爆炸答案 1 :(得分:2)
没有for循环
$item['category_names'] = "Hair, Fashion, News";
$categories = "<category>".
implode("</category>\n<category>",
array_map('trim', explode(",", $item['category_names']))) .
"</category>\n";
echo $categories;
答案 2 :(得分:0)
如果你使用它:
$cats = explode(", ", $item['category_names']);
foreach($cats as $cat) {
$categories = "<category>" . $cat . "</category>\n";
}
每次都会覆盖$ categories字符串,因此“hair”和“fasion”会丢失..
但是如果你在for循环中的等号之前添加一个点,就像这样:
$cats = explode(", ", $item['category_names']);
foreach($cats as $cat) {
$categories .= "<category>" . $cat . "</category>\n";
}
$ catergories字符串将包含所有三个值:)
答案 3 :(得分:0)
代码中的错误是:
$categories = "<category>" . $cat . "</category>\n";
您在每次迭代时都会覆盖$categories
,它应该是:
$categories .= "<category>" . $cat . "</category>\n";
不确定我是否采取了正确的方法?
查找并替换爆炸的内容。如果您只想更正代码错误 - 请参阅上文。
这更有效:
$categories = "<category>" .
str_replace(', ', "</category>\n<category>", $input) .
"</category>\n";
这也解释了变量空白:
$categories = "<category>" .
preg_replace('@\s*,\s*@', "</category>\n<category>", $input) .
"</category>\n";