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