Intereting Posts

PHP взрывает массив, затем перебирает значения и выводит переменную

Строка, которую я пытаюсь разделить, это $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 

Не уверен, что я правильно поеду по этому поводу?

В вашем коде вы заменяете переменную $ categories на каждой итерации. Правильный код будет выглядеть так:

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

update: как предложил @Nanne, взорваться только на ','

Без цикла for

 $item['category_names'] = "Hair, Fashion, News"; $categories = "<category>". implode("</category>\n<category>", array_map('trim', explode(",", $item['category_names']))) . "</category>\n"; echo $categories; 

если вы используете это:

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

строка $ categories перезаписывается каждый раз, поэтому «волосы» и «fasion» теряются.

если вы, однако, добавили точку до знака равенства в цикле for, например:

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

строка $ catergories будет состоять из всех трех значений 🙂

Ошибка в вашем коде:

 $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";