XML 変換のために多次元配列を効率的に反復する方法は?

Barbara Streisand
リリース: 2024-10-20 15:38:29
オリジナル
538 人が閲覧しました

How to Efficiently Iterate Multidimensional Arrays for XML Transformation?

XML 変換のための多次元配列の反復

問題

多次元配列を XML 文字列に変換することは、データ処理における一般的なタスクです。次の配列について考えてみましょう:

$nodes = array(
    "parent node",
    "parent node",
    array(
        "child node",
        "child node",
        array(
            "grand child node",
            "grand child node"
        )
    )
);
ログイン後にコピー

目的は、それを次の構造に似た XML 文字列に変換することです:

<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>
ログイン後にコピー

反復による解決

再帰関数実行可能なアプローチを提供する場合、場合によっては反復的なソリューションの方が効率的になる場合があります。イテレータを使用した例を次に示します。

class TranformArrayIterator extends RecursiveIteratorIterator
{
    ... // Implementation omitted for brevity
}
ログイン後にコピー

このカスタム イテレータにより、次のような反復プロセスのカスタム制御が可能になります。

  • インデントと深さの追跡
  • 開始および終了ノード
  • 現在の要素を XML ノードとして設定する

反復子を使用するには:

$iterator = new TranformArrayIterator(new RecursiveArrayIterator($nodes));

foreach($iterator as $val) {
    echo $val;
}
ログイン後にコピー

XMLWriter による解決策

の場合XML 生成をより細かく制御できるため、XMLWriter をコラボレータとして使用できます。

class TranformArrayIterator extends RecursiveIteratorIterator
{
    ... // Implementation omitted for brevity
}

$xmlWriter = new XmlWriter;
... // Configuration and initialization of XMLWriter omitted

$iterator = new TranformArrayIterator(
    $xmlWriter,
    new RecursiveArrayIterator($nodes)
);
ログイン後にコピー

このシナリオでは、イテレータは XMLWriter に直接アクセスできるため、生成された XML 構造をきめ細かく制御できます。

結論

どちらの反復アプローチも、多次元配列を XML 文字列に変換する効率的な方法を提供します。具体的な選択は、XML 出力に対する必要な制御レベルによって異なります。

以上がXML 変換のために多次元配列を効率的に反復する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!