現在の位置: ホーム> 最新記事一覧> XML_PARSEをARRAY_MAP関数で解析して取得したXMLデータを使用して、バッチ処理とデータの変換を実現する方法は?

XML_PARSEをARRAY_MAP関数で解析して取得したXMLデータを使用して、バッチ処理とデータの変換を実現する方法は?

M66 2025-04-24

PHPでは、特に外部システムと対話する場合、XMLデータの処理は一般的なタスクです。 XML_PARSEは基礎となる解析機能であり、 Array_Mapはバッチデータ変換の高次関数です。これらの2つの機能を組み合わせることで、バッチXMLデータを効果的に処理および変換し、コードの読みやすさと保守性を向上させることができます。

以下に、例を使用して、この目標を達成する方法を示します。

例:XMLデータのバッチ処理と構造化された配列に変換する

簡単なXMLテキストから始めましょう:

 <items>
    <item>
        <id>1</id>
        <name>商品A</name>
        <url>http://m66.net/product/1</url>
    </item>
    <item>
        <id>2</id>
        <name>商品B</name>
        <url>http://m66.net/product/2</url>
    </item>
</items>

ステップ1: XML_PARSERを使用してXMLを解析します

$xmlData = <<<XML
<items>
    <item>
        <id>1</id>
        <name>商品A</name>
        <url>http://m66.net/product/1</url>
    </item>
    <item>
        <id>2</id>
        <name>商品B</name>
        <url>http://m66.net/product/2</url>
    </item>
</items>
XML;

$parser = xml_parser_create();
xml_parse_into_struct($parser, $xmlData, $values, $index);
xml_parser_free($parser);

これにより、XMLデータが2つの配列に分析されます: $値(すべてのタグの詳細を含む)と$インデックス(タグのインデックスロケーションを含む)。

ステップ2:アイテム要素を抽出します

$items = [];
foreach ($index['ITEM'] as $i => $pos) {
    $item = [];

    $idPos = $index['ID'][$i];
    $namePos = $index['NAME'][$i];
    $urlPos = $index['URL'][$i];

    $item['id'] = $values[$idPos]['value'];
    $item['name'] = $values[$namePos]['value'];
    $item['url'] = $values[$urlPos]['value'];

    $items[] = $item;
}

これで、きちんとした配列構造が得られます。たとえば、次のようになります。

 [
    ['id' => '1', 'name' => '商品A', 'url' => 'http://m66.net/product/1'],
    ['id' => '2', 'name' => '商品B', 'url' => 'http://m66.net/product/2'],
]

ステップ3: array_mapを使用して、バッチでデータを変換します

各URLにref = xmlパラメーターを追加し、製品名を大文字に変換すると仮定します。これを行うことができます。

 $processedItems = array_map(function($item) {
    $item['name'] = strtoupper($item['name']);
    $item['url'] .= '?ref=xml';
    return $item;
}, $items);

最終出力:

 print_r($processedItems);

出力結果:

 Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 商品A
            [url] => http://m66.net/product/1?ref=xml
        )

    [1] => Array
        (
            [id] => 2
            [name] => 商品B
            [url] => http://m66.net/product/2?ref=xml
        )
)