Frage an php, arrays – PHP explode array durchläuft dann die Werte und gibt sie als Variable aus

5

Die Saite, die ich aufzuteilen versuche, ist$item['category_names'] was zum Beispiel enthältHair, Fashion, News

Ich habe derzeit den folgenden Code:

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

Ich möchte das Ergebnis von$categories um wie folgt zu sein, damit ich es später irgendwo wiedergeben kann.

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

Sie sind sich nicht sicher, ob ich den richtigen Weg einschlagen soll?

Vielleicht interessieren Sie sich für diesimpleXML Objekt. Es ist eine ziemlich einfache und robuste Methode, um XML-Dateien zu erstellen Elias Van Ootegem
Ich würde weiter explodieren, und dann das Ergebnis kürzen, nicht weiter explodieren, Nanne
Hast du diesen Code ausprobiert? Sollte funktionieren, denke ich Bono
funktioniert es? Das ist ein ziemlich guter Rauchtest. wenn Sie tun$categories .=  es würde zumindest das tun, was Sie zu erwarten scheinen. AD7six
$ categories. = // Verkettung fehlt djot

Deine Antwort

5   die antwort
0

Der Fehler in Ihrem Code ist folgender:

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

Sie überschreiben$categories bei jeder Iteration sollte es sein:

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

Sie sind sich nicht sicher, ob ich den richtigen Weg einschlagen soll?

Suchen und Ersetzen ist nicht das, wofür Explosion ist. Wenn Sie nur den Codefehler korrigieren möchten, siehe oben.

Das ist effizienter:

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

Und das berücksichtigt auch variable Leerzeichen:

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

wenn du das verwendest:

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

Die $ categories-Zeichenfolge wird jedes Mal überschrieben, sodass "hair" und "fasion" verloren gehen.

Wenn Sie jedoch einen Punkt vor dem Gleichheitszeichen in der for-Schleife einfügen, wie folgt:

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

Die $ catergories-Zeichenfolge besteht aus allen drei Werten :)

2

Ohne for-Schleife

$item['category_names'] = "Hair,   Fashion,   News";
$categories = "<category>".
        implode("</category>\n<category>", 
        array_map('trim', explode(",", $item['category_names']))) . 
        "</category>\n";
echo $categories;
Dies vereinfacht nichts undarray_map('trim', $cats) ist viel einfacher (und effizienter) als die Verwendung von array_walk und create function AD7six
viel besser :) - Formatierung, so dass es in das Codefenster passt (oder nicht mit mehreren PHP-Funktionen in einer Zeile) würde es einfacher zu lesen AD7six
array_map habe ich früher gesucht! Vielen Dank. Aaron W.
14

ration. Der richtige Code würde so aussehen:

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

update: wie von @Nanne vorgeschlagen, explodiere nur auf ','

@ AD7six niemand sagt, dass dies die einzige Lösung ist, es ist tatsächlich eine feste Version des OP-Codes; Also ja, es ist die richtige Version der Implementierung von OP. Maxim Krizhanovsky
Süß, es funktioniert Michael d
außer "was ist los mit meinem Code" ist nicht die Frage, die gestellt wurde AD7six
-1

PHP explodiert Array von Schleife Demo:http://sandbox.onlinephpfunctions.com/code/086402c33678fe20c4fbae6f2f5c18e77cb3fbc2

Es funktioniert für mich

<?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 was du willst kannst du bitte erklären divya sekar
Postleitzahl ohne Erklärung wird als minderwertig empfunden. Sie sollten auch erklären, warum / wie der von Ihnen eingegebene Code die gestellte Frage tatsächlich beantwortet. ZB: "Teil ... im Code so und so (wie in der Frage enthalten) enthält einen Fehler. Dh dies und das ist falsch. Stattdessen sollte es so korrigiert werden ... Dies behebt tatsächlich Ihren Fehler, weil ... ". PS: "read the source" ist auch nicht von hoher Qualität. Pierre.Vriens

Verwandte Fragen