Position actuelle: Accueil> Derniers articles> Comment utiliser les données XML analysées par XML_Parse avec array_map

Comment utiliser les données XML analysées par XML_Parse avec array_map

M66 2025-04-24

En PHP, le traitement des données XML est une tâche courante, en particulier lors de l'interaction avec les systèmes externes. XML_PARSE est une fonction d'analyse sous-jacente, tandis que Array_Map est une fonction d'ordre supérieur pour la conversion des données par lots. La combinaison de ces deux fonctions peut traiter et convertir efficacement les données de XML par lots, améliorant la lisibilité et la maintenabilité du code.

Ci-dessous, nous utiliserons un exemple pour montrer comment atteindre cet objectif.

Exemple: traitement par lots des données XML et la convertir en un tableau structuré

Commençons par un simple texte XML:

 <items>
    <item>
        <id>1</id>
        <name>marchandisesA</name>
        <url>http://m66.net/product/1</url>
    </item>
    <item>
        <id>2</id>
        <name>marchandisesB</name>
        <url>http://m66.net/product/2</url>
    </item>
</items>

Étape 1: Utilisez XML_PARSER pour analyser XML

 $xmlData = <<<XML
<items>
    <item>
        <id>1</id>
        <name>marchandisesA</name>
        <url>http://m66.net/product/1</url>
    </item>
    <item>
        <id>2</id>
        <name>marchandisesB</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);

Cela analyse les données XML en deux tableaux: $ valeurs (y compris les détails pour toutes les balises) et $ index (y compris les emplacements d'index pour les balises).

Étape 2: Extraire l'élément d'article

 $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;
}

Maintenant, nous obtenons une structure de tableau soignée, par exemple:

 [
    ['id' => '1', 'name' => 'marchandisesA', 'url' => 'http://m66.net/product/1'],
    ['id' => '2', 'name' => 'marchandisesB', 'url' => 'http://m66.net/product/2'],
]

Étape 3: Utilisez Array_map pour convertir les données par lots

Supposons que nous voulons ajouter le paramètre REF = XML à chaque URL et convertir le nom du produit en capitalisation, nous pouvons le faire:

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

Sortie finale:

 print_r($processedItems);

Résultat de sortie:

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

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