2010-07-17 3 views
0

J'essaie d'automatiser mon traitement des commandes Amazon. Actuellement, j'utilise Amazon Merchant Transport pour obtenir le fichier XML pour une commande, mais finalement, je veux obtenir les fichiers xml avec un service web directement sur mon compte central du vendeur.php amazon xml traitement des commandes

tableau partiel avec des informations d'ordre Amazon -

Array 
(
... 
     [37] => Array 
     (
      [tag] => NAME 
      [type] => complete 
      [level] => 6 
      [value] => John Smith 
     ) 
... 
    [39] => Array 
     (
      [tag] => ADDRESSFIELDONE 
      [type] => complete 
      [level] => 6 
      [value] => 100 N MAIN St. 
     ) 
... 
    [41] => Array 
     (
      [tag] => CITY 
      [type] => complete 
      [level] => 6 
      [value] => PLANO 
     ) 
... 
    [43] => Array 
     (
      [tag] => STATEORREGION 
      [type] => complete 
      [level] => 6 
      [value] => TX 
     ) 
... 
    [45] => Array 
     (
      [tag] => POSTALCODE 
      [type] => complete 
      [level] => 6 
      [value] => 75075-1948 
     ) 

) 

Je suis en mesure de récupérer mes ordres sous forme de documents XML et peut les analyser avec le code suivant.

$contents = file_get_contents("amzn-order-sample.xml"); 
$p = xml_parser_create(); 
xml_parse_into_struct($p, $contents, $vals, $index); 
xml_parser_free($p); 

Maintenant, je suis en train de retirer les informations relatives à l'ordre - d'abord une information de temps (nom de l'expéditeur, adresse)

alors je veux être en mesure d'obtenir les « articles commandés/quantité » information, qui pourrait être 1-> beaucoup d'articles pour ce client.

Exemple de code que je travaille - pour récupérer la valeur (que je vais mettre dans un autre tableau pour un traitement ultérieur) (assez laid)

$arrIt = new RecursiveIteratorIterator(new RecursiveArrayIterator($vals)); 

// shipper name 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'NAME') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper Name\n"; 
    print_r($outputArray); 
    } 
} 

// shipper phone 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'BUYERPHONENUMBER') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper Phone\n"; 
    print_r($outputArray); 
    } 
} 

// shipper addresslineone 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'ADDRESSFIELDONE') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper Address\n"; 
    print_r($outputArray); 
    } 
} 

// shipper city 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'CITY') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper City\n"; 
    print_r($outputArray); 
    } 
} 

// shipper state 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'STATEORREGION') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper State\n"; 
    print_r($outputArray); 
    } 
} 

// shipper zip 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'POSTALCODE') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper Zip\n"; 
    print_r($outputArray); 
    } 
} 
// items 
foreach ($arrIt as $sub) { 
    $subArray = $arrIt->getSubIterator(); 
    if ($subArray['tag'] === 'POSTALCODE') { 
     $outputArray[] = iterator_to_array($subArray); 
    echo "Shipper Zip\n"; 
    print_r($outputArray); 
    } 
} 

je vais analyser les 1 nombreux articles par Commandez dans une boucle avec le code ci-dessus, mais il doit y avoir une meilleure façon, plus propre .. - peut-être quelqu'un a des extraits de code qu'ils peuvent offrir.

Merci à l'avance pour toutes les idées ..

un débutant à PHP

Il doit y avoir beaucoup de meilleures façons de faire ce type de code XML et PHP (ce sera traité sur un serveur Linux) - Toutes les suggestions ou autres idées sont les bienvenues

+0

Quelqu'un peut-il emballer son code s'il vous plaît? – quantumSoup

+0

Formatage fixe. –

+0

Tellement de code, si peu formaté. @newbiephper s'il vous plaît utiliser les options de formatage pour citer ce code afin qu'il soit lisible. Merci @Thomas Owens –

Répondre

0

Vous n'avez besoin que d'une seule boucle foreach, car chacune fait la même chose, mais cherche des informations différentes.

Quelque chose comme:

foreach ($order_info_array as $sub) 
{ 
    switch ($sub['tag']) 
    { 
     case 'NAME': 
      echo "Shipper name\n"; 
      break; 
     case 'BUYERPHONENUMBER': 
      echo "Shipper Phone\n"; 
      break; 
    } 

    echo $sub['value']; 
} 

Jetez un oeil à l'entrée manuelle pour l'instruction switch: http://php.net/manual/en/control-structures.switch.php

Remarque, dans le cas où il est pas évident. $ order_info_array est la version complète de ce tableau massif que vous avez posté.

+0

Merci beaucoup - c'était l'information que j'essayais de comprendre et de trouver dans mon exemple de tableau recherche – user394407

+0

@newbiephper Vous êtes les bienvenus. Vous devez accepter la réponse en cliquant sur la coche à côté de celle-ci. Je suggère également de lire la FAQ pour avoir une idée du fonctionnement de stackoverflow. –