2012-05-18 114 views
4

通過數值數組然後循環和輸出,我試圖分裂的字符串是$item['category_names']其中例如包含Hair, Fashion, NewsPHP爆炸可變

目前,我有以下代碼:

$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 

不確定我是否正確地採取這種方式?

+3

它的工作原理?這是一個相當不錯的煙霧測試。如果你做'$ categories。=',它至少會做你看起來期待的東西。 – AD7six

+3

$ categories。= //串聯丟失 – djot

+0

你試過這段代碼嗎?我應該工作,我認爲 – Bono

回答

12

在您的代碼中,您將覆蓋每次迭代中的$ categories變量。正確的代碼如下所示:

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

更新:如@Nanne建議,爆炸只對 ''

+0

@ AD7six沒有人說這是唯一的解決方案,它實際上是OP代碼的固定版本;所以是的,這是OP實施的正確版本。 –

+0

除了「我的代碼出了什麼問題」不是已經問過的問題 – AD7six

+0

很好,它可以工作 –

0

如果使用這樣的:

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

的$類別字符串覆蓋各時間,所以「頭髮」和「fasion」丟失..

如果你但是在for循環等號之前加點,如下所示:

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

的$ catergories字符串將包含所有三個值:)

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"; 
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; 
+0

這不會簡化任何事情,'array_map('trim',$ cats)'是一個簡單得多的(高效的)比使用array_walk和創建函數 – AD7six

+0

'array_map'是我之前尋找的!謝謝。 –

+0

好得多:) - 格式化,所以它適合在代碼窗口(或不使用一個行上的多個PHP函數)會使它更容易閱讀 – AD7six