Pytanie w sprawie php, arrays – PHP rozbija tablicę, a następnie przechodzi przez wartości i wyprowadza do zmiennej

5

Ciąg, który próbuję podzielić, jest$item['category_names'] na przykład zawieraHair, Fashion, News

Obecnie mam następujący kod:

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

Chcę wyniku$categories aby być jak poniżej, aby móc później gdzieś to powtórzyć.

<category>Hair</category>\n
<category>Fashion</category>\n
<category>News</category>\n

Nie jestem pewien, czy pójdę właściwą drogą w tej sprawie?

Czy to działa? To całkiem niezły test dymu. Jeśli zrobisz$categories .=  przynajmniej zrobiłoby to, czego się spodziewasz. AD7six
Być może być zainteresowany korzystaniem zsimpleXML obiekt. Jest to dość prosty i solidny sposób tworzenia plików XML Elias Van Ootegem
$ category. = // brak konkatenacji djot
Eksplodowałbym, a następnie przyciąć wynik, a nie eksplodować, Nanne
Czy próbowałeś tego kodu? Myślę, że powinien działać Bono

Twoja odpowiedź

5   odpowiedzi
2

Bez pętli 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 tego właśnie szukałem wcześniej! Dzięki. Aaron W.
To niczego nie upraszcza iarray_map('trim', $cats) jest dużo prostsze (i wydajniejsze) niż użycie array_walk i tworzenie funkcji AD7six
znacznie lepiej :) - formatowanie, aby pasowało do okna kodu (lub nieużywanie wielu funkcji php w jednej linii) ułatwiłoby czytanie AD7six
0

Błąd w kodzie jest następujący:

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

Nadpisujesz$categories przy każdej iteracji powinno być:

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

Nie jestem pewien, czy pójdę właściwą drogą w tej sprawie?

find and replace nie jest tym, co eksploduje. Jeśli chcesz tylko poprawić błąd kodu - zobacz powyżej.

To jest bardziej wydajne:

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

A to również odpowiada zmiennej bieli:

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

PHP rozbija tablicę po pętli próbny:http://sandbox.onlinephpfunctions.com/code/086402c33678fe20c4fbae6f2f5c18e77cb3fbc2

jego prace dla mnie

<?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 Czego chcesz, możesz to wyjaśnić divya sekar
publikowanie kodu bez wyjaśnienia jest postrzegane jako niska jakość. Powinieneś również wyjaśnić, dlaczego / jak napisany kod faktycznie odpowiada na zadawane pytanie. Np .: „część ... w kodzie, a więc (tak jak w pytaniu) zawiera błąd. Czyli to i to jest złe. Zamiast tego powinno być poprawione w ten sposób ... To rzeczywiście rozwiązuje błąd, ponieważ ... . ”. PS: „czytaj źródło” też nie jest wysokiej jakości. Pierre.Vriens
0

jeśli tego używasz:

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

ciąg $ category jest nadpisywany za każdym razem, więc „włosy” i „fasion” zostają utracone.

jeśli jednak dodasz kropkę przed znakiem równości w pętli for, tak:

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

ciąg $ catergories będzie składał się ze wszystkich trzech wartości :)

14

W swoim kodzie nadpisujesz zmienną $ category w każdej iteracji. Prawidłowy kod wyglądałby następująco:

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

update: jak sugeruje @Nanne, rozbij tylko na ','

z wyjątkiem „to, co jest nie tak z moim kodem”, nie jest pytaniem, które zostało zadane AD7six
@ AD7six nikt nie twierdzi, że jest to jedyne rozwiązanie, w rzeczywistości jest to naprawiona wersja kodu OP; więc tak, to poprawna wersja implementacji OP. Maxim Krizhanovsky
Słodki, to działa Michael d

Powiązane pytania