10

分割しようとしている文字列は$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

5 に答える 5

28

コードでは、各反復で $categories 変数を上書きしています。正しいコードは次のようになります。

$categories = '';
$cats = explode(",", $item['category_names']);
foreach($cats as $cat) {
    $cat = trim($cat);
    $categories .= "<category>" . $cat . "</category>\n";
}

更新:@Nanneが示唆したように、「、」でのみ爆発します

于 2012-05-18T10:33:31.580 に答える
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;
于 2012-05-18T10:42:35.583 に答える
1

これを使用する場合:

$cats = explode(", ", $item['category_names']);
foreach($cats as $cat) {
$categories = "<category>" . $cat . "</category>\n";
}

$categories 文字列は毎回上書きされるため、「髪」と「ファッション」は失われます。

ただし、for ループの等号の前にドットを追加すると、次のようになります。

$cats = explode(", ", $item['category_names']);
foreach($cats as $cat) {
$categories .= "<category>" . $cat . "</category>\n";
}

$categories 文字列は、3 つの値すべてで構成されます :)

于 2012-05-18T10:35:16.293 に答える
0

コードのエラーは次のとおりです。

$categories = "<category>" . $cat . "</category>\n";

$categories各反復で上書きします。次のようになります。

$categories .= "<category>" . $cat . "</category>\n";

私がこれについて正しい方向に進んでいるかどうかわかりませんか?

検索と置換は、explodeの目的ではありません。コードエラーを修正したいだけの場合は、上記を参照してください。

これはより効率的です:

$categories = "<category>" .
    str_replace(', ', "</category>\n<category>", $input) . 
    "</category>\n";

そして、これは可変空白も説明します:

$categories = "<category>" . 
    preg_replace('@\s*,\s*@', "</category>\n<category>", $input) . 
    "</category>\n";
于 2012-05-18T10:42:04.520 に答える