Pregunta sobre php, arrays – PHP explota la matriz, luego recorre los valores y la salida a la variable

5

La cadena que estoy tratando de dividir es$item['category_names'] que por ejemplo contieneHair, Fashion, News

Actualmente tengo el siguiente código:

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

Quiero el resultado de$categories para ser como el siguiente, así puedo hacer eco más tarde en algún lugar.

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

¿No estoy seguro de si voy por el camino correcto?

Explotaría en, y luego recortar el resultado, no explotar en, Nanne
¿Has probado este código? Deberia trabajar creo Bono
$ categories. = // falta concatenación djot
Tal vez usted podría estar interesado en utilizar elsimpleXML objeto. Es una forma bastante simple y robusta de crear archivos XML. Elias Van Ootegem
¿Funciona? Esa es una prueba de humo bastante buena. si lo haces$categories .=  Al menos haría lo que pareces estar esperando. AD7six

Tu respuesta

5   la respuesta
0

El error en tu código es este:

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

Estas sobreescribiendo$categories En cada iteración, debe ser:

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

¿No estoy seguro de si voy por el camino correcto?

encontrar y reemplazar no es para lo que explota. Si solo desea corregir el error de código, consulte más arriba.

Esto es más eficiente:

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

Y esto también tiene en cuenta los espacios en blanco variables:

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

PHP explota matriz por bucle manifestación:http://sandbox.onlinephpfunctions.com/code/086402c33678fe20c4fbae6f2f5c18e77cb3fbc2

me funciona

<?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, ¿qué quieres? ¿Puedes explicarlo? divya sekar
El código de publicación sin explicación se percibe como de baja calidad. También debe explicar por qué / cómo el código que publicó responde realmente a la pregunta que se le hace. Por ejemplo: "parte ... en el código tal y tal (como se incluye en la pregunta) contiene un error. Es decir, esto y esto es incorrecto. En su lugar, debe corregirse así ... Esto realmente resuelve su error porque ... . ". PD: "leer la fuente" tampoco es de alta calidad. Pierre.Vriens
14

está sobrescribiendo la variable $ categories en cada iteración. El código correcto se vería así:

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

actualización: como sugirió @Nanne, explotar solo en ','

Dulce funciona funciona Michael d
@ AD7six nadie dice que esta es la única solución, en realidad es una versión fija del código del OP; así que sí, es la versión correcta de la implementación de OP. Maxim Krizhanovsky
excepto que "lo que está mal con mi código" no es la pregunta que se ha hecho AD7six
2

Sin un bucle for

$item['category_names'] = "Hair,   Fashion,   News";
$categories = "<category>".
        implode("</category>\n<category>", 
        array_map('trim', explode(",", $item['category_names']))) . 
        "</category>\n";
echo $categories;
Mucho mejor :): el formato para que quepa en la ventana de código (o no usar múltiples funciones php en una línea) facilitaría la lectura AD7six
array_map es lo que estaba buscando antes! Gracias. Aaron W.
Esto no simplifica nada yarray_map('trim', $cats) es mucho más simple (y eficiente) que usar array_walk y create function AD7six
0

si usas esto:

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

La cadena $ categories se sobrescribe cada vez, por lo que se pierden "hair" y "fasion".

Sin embargo, si agrega un punto antes del signo igual en el bucle for, así:

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

La cadena $ catergories constará de los tres valores :)

Preguntas relacionadas