PHP爆炸数组然后循环遍历值并输出到变量

时间:2012-05-18 10:29:48

标签: php arrays

我要分割的字符串是$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

不确定我是否正确地采取了这种方式?

4 个答案:

答案 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";