2010-07-17 90 views
0

我試圖自動化我的亞馬遜訂單處理。目前,我正在使用Amazon Merchant Transport獲取訂單的XML文件,但最終,我希望將帶有Web服務的XML文件直接發送到我的賣家中央帳戶。php亞馬遜xml訂單處理

與亞馬遜訂購信息部分陣列 -

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 
     ) 

) 

我能找回我的訂單爲XML文檔,可以用下面的代碼解析。

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

現在我試圖拔出訂單相關的信息 - 首先是一個時間信息(發貨人姓名,地址)

話,我希望能夠得到「有序的項目/數量」信息,這可能是這個客戶的1->很多項目。

,我已經工作

示例代碼 - 檢索值(我將投入到另一個陣列進行進一步處理)(很醜)

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

我要分析每1-許多項目與上面的代碼一起循環排序,但必須有更好,更乾淨的方式.. - 也許有人有他們可以提供的代碼片段。

在此先感謝您的任何想法..

一個新手到PHP

一定有很多更好的方法可以做到這類型的代碼中使用XML和PHP(這將在Linux服務器上進行處理) - 任何建議或其他想法都非常受歡迎

+0

有人可以包裹他的代碼嗎? – quantumSoup 2010-07-17 01:06:02

+0

格式化固定。 – 2010-07-17 01:11:04

+0

這麼多的代碼,很少格式化。 @newbiephper請使用格式選項引用此代碼,以便它清晰易讀。謝謝@Thomas Owens – 2010-07-17 01:11:31

回答

0

您只需要一個foreach循環,因爲每個人都在做同樣的事情,但尋找不同的信息。

喜歡的東西:

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']; 
} 

在switch語句中手動輸入請看:http://php.net/manual/en/control-structures.switch.php

注意,在情況下,它並不明顯。 $ order_info_array是你發佈的海量數組的完整版本。

+0

非常感謝 - 這是我想了解的信息,並在我的數組示例中搜索 – user394407 2010-07-17 16:03:56

+0

@newbiephper你很受歡迎。您應該通過點擊旁邊的複選標記來接受答案。我還建議閱讀常見問題,以瞭解如何使用stackoverflow功能。 – 2010-07-17 22:51:44