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

5

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

Не уверен, пойду ли я правильно?

Ты пробовал этот код? Должен работать, я думаю, Bono
это работает? Это довольно хороший тест на дым. если вы делаете$categories .= это, по крайней мере, сделает то, что ты ожидаешь. AD7six
Возможно, вы можете быть заинтересованы в использовании SimpleXml объект. Это довольно простой и надежный способ создания XML-файло Elias Van Ootegem
Я бы взорвался на, и затем обрезать результат, а не взрываться на, Nanne
$ Categories. = // Конкатенация отсутствует djot

Ваш Ответ

5   ответов
14

и. Правильный код будет выглядеть так:

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

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

@ AD7six никто не утверждает, что это единственное решение, на самом деле это фиксированная версия кода ОП; так что да, это правильная версия реализации O Maxim Krizhanovsky
Кроме того, что не так с моим кодом, это не вопрос, который был задан AD7six
Сладкий, это работает Michael d
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;
Это ничего не упрощает иarray_map('trim', $cats) намного проще (и эффективнее), чем использование array_walk и функции create AD7six
array_map это то, что я искал раньше! Благодарность Aaron W.
намного лучше :) - форматирование, чтобы оно помещалось в окне кода (или не использовало несколько функций php в одной строке), облегчило бы чтение AD7six
0

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

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

строка $ category каждый раз перезаписывается, поэтому "hair" и "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";

Не уверен, пойду ли я правильно?

find and replace - это не то, что нужно для разнесения. Если вы просто хотите исправить ошибку кода - см. Выше.

Это более эффективно:

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

И это также учитывает переменные пробелы:

$categories = "<category>" . 
    preg_replace('@\s*,\s*@', "</category>\n<category>", $input) . 
    "</category>\n";
-1

PHP взорвать массив за циклом демо:http: //sandbox.onlinephpfunctions.com/code/086402c33678fe20c4fbae6f2f5c18e77cb3fbc

у меня работает

<?php

$str = "name:john,hone:12345,ebsite:www.23.com";

$array=explode(",",$str);

if(count($array)!=0)
{
foreach($array as $value)
{

    $data=explode(":",$value);

      echo $data[0]."=".$data[1];


    echo ' ';

}
}
?>
@ Pierre.Vriens, что ты хочешь, можешь ли ты объяснить это divya sekar
постинг кода без объяснения воспринимается как низкое качество. Вы также должны объяснить, почему / как код, который вы разместили, действительно отвечает на заданный вопрос. Например: «часть ... в коде так и так (как включен в вопрос) содержит ошибку. Т.е. это и это неправильно. Вместо этого это должно быть исправлено следующим образом ... Это на самом деле решает вашу ошибку, потому что ... ".. PS: «читать исходники» тоже не высокого качества. Pierre.Vriens

Похожие вопросы