So transformieren Sie mehrdimensionale Arrays iterativ in XML mit Iterator und XMLWriter

Barbara Streisand
Freigeben: 2024-10-20 15:40:03
Original
476 Leute haben es durchsucht

How to Iteratively Transform Multidimensional Arrays into XML with Iterator and XMLWriter

Iterieren mehrdimensionaler Arrays für die XML-Transformation

Eine häufige Aufgabe bei der Arbeit mit verschachtelten oder mehrdimensionalen Arrays ist deren Konvertierung in eine XML-Struktur. Betrachten Sie beispielsweise das folgende Array:

$nodes = array(
    "parent node",
    "parent node",
    array(
        "child node",
        "child node",
        array(
            "grand child node",
            "grand child node"
        )
    )
);
Nach dem Login kopieren

Das Ziel besteht darin, das gegebene Array in eine XML-Zeichenfolge umzuwandeln, wie zum Beispiel:

<node>
    <node>parent node</node>
    <node>parent node</node>
    <node>
        <node>child node</node>
        <node>child node</node>
        <node>
            <node>grand child node</node>
            <node>grand child node</node>
        </node>
    </node>
</node>
Nach dem Login kopieren

Rekursiver Ansatz

Eine gängige Methode zum Umgang mit verschachtelten Strukturen ist die Rekursion, wie unten dargestellt:

<code class="php">function traverse($nodes) {
    echo "<node>";

    foreach ($nodes as $node) {
        if (is_array($node)) {
            traverse($node);
        } else {
            echo "<node>$node</node>";
        }
    }

    echo "</node>";
}</code>
Nach dem Login kopieren

Iterativer Ansatz mit Iterator

Jedoch eine Alternative Der Ansatz besteht darin, die Iteration mit einem Iterator zu verwenden. Dies ermöglicht eine größere Flexibilität und vereinfacht den Prozess:

<code class="php">class TranformArrayIterator extends RecursiveIteratorIterator {
    // Add indentation for each level
    protected function indent() {
        echo str_repeat("\t", $this->getDepth());
        return $this;
    }

    public function beginIteration() {
        echo '<nodes>', PHP_EOL;
    }

    public function endIteration() {
        echo '</nodes>', PHP_EOL;
    }

    public function beginChildren() {
        $this->indent()->beginIteration();
    }

    public function endChildren() {
        $this->indent()->endIteration();
    }

    public function current() {
        return sprintf('%s<node>%s</node>%s',
            str_repeat("\t", $this->getDepth() + 1),
            parent::current(),
            PHP_EOL
        );
    }
}</code>
Nach dem Login kopieren

Um den Iterator zu verwenden, instanziieren Sie ihn und durchlaufen das Array:

<code class="php">$iterator = new TranformArrayIterator(new RecursiveArrayIterator($nodes));

foreach ($iterator as $val) {
    echo $val;
}</code>
Nach dem Login kopieren

Dieser Ansatz erzeugt eine äquivalente XML-Ausgabe als rekursive Methode.

XMLWriter-Zusammenarbeit

Für eine präzisere XML-Steuerung und -Validierung können Sie einen XMLWriter in Zusammenarbeit mit dem Iterator verwenden:

<code class="php">class TranformArrayIterator extends RecursiveIteratorIterator {
    private $xmlWriter;

    public function __construct(XmlWriter $xmlWriter, Traversable $iterator, $mode = RecursiveIteratorIterator::LEAVES_ONLY, $flags = 0) {
        $this->xmlWriter = $xmlWriter;
        parent::__construct($iterator, $mode, $flags);
    }

    public function beginIteration() {
        $this->xmlWriter->startDocument('1.0', 'utf-8');
        $this->beginChildren();
    }

    public function endIteration() {
        $this->xmlWriter->endDocument();
    }

    public function beginChildren() {
        $this->xmlWriter->startElement('nodes');
    }

    public function endChildren() {
        $this->xmlWriter->endElement();
    }

    public function current() {
        $this->xmlWriter->writeElement('node', parent::current());
    }
}</code>
Nach dem Login kopieren

Dieser Iterator ermöglicht eine genauere Kontrolle über die XML-Struktur und stellt deren Gültigkeit sicher.

Durch die Nutzung der Leistungsfähigkeit von Iteratoren können Sie mehrdimensionale Arrays effizient verarbeiten und in XML-Strukturen umwandeln, was sowohl Flexibilität als auch Kontrolle für eine Vielzahl von Szenarien bietet.

Das obige ist der detaillierte Inhalt vonSo transformieren Sie mehrdimensionale Arrays iterativ in XML mit Iterator und XMLWriter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!