2011-08-31 59 views
0

我即將完成一個腳本,它使用simplexml來處理一些數據,但我被卡在最後。SimpleXML數據處理

那麼,沒有卡住,但好奇和卡住。

$ tmp包含我的XML(約750k),目標是將其轉換爲fputcsv(包含每行數組的父數組)的格式。

下面的工作,但我可以使用fputcsv併發送回用戶,而不是一個很好的乾淨的數組有很多的開銷,我不需要寫入一個CSV文件,這會造成我的問題毫無疑問與fputcsv。我已經將輸出清理成只有幾個標題列和幾行,但實際上有20列和數百行。無論如何清理fputcsv之前?

 // Process XML response into arrays for fputcsv 
     $csv = array(); 
     $xml = simplexml_load_string($tmp); 

     // Create array and loop each column for header row 
     $header_row = array(); 
     foreach ($xml->RESPONSE->DATA->HEADER->COLUMN as $column) { 
      $header_row[] = $column; 
     } 
     $csv[] = $header_row; 

     // Create array and loop each column for header row 

     foreach ($xml->RESPONSE->DATA->ROW as $row) { 
      $data_row = array(); 
      foreach ($row->COLUMN as $datacolvalue){ 
       $data_row[] = $datacolvalue; 
      } 
      $csv[] = $data_row; 
      unset($data_row); 
     } 

     // Output var to check for accuracy (later add fputcsv) 
     var_dump($csv); 

輸出(print_r的 - 如果需要的話可以的var_dump):

Array 
(
    [0] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [0] => date 
       ) 

      [1] => SimpleXMLElement Object 
       (
        [0] => name 
       ) 
) 

    [1] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [@attributes] => Array 
         (
          [data_type] => text 
         ) 

        [0] => Aug 01, 2011 
       ) 

      [1] => SimpleXMLElement Object 
       (
        [@attributes] => Array 
         (
          [data_type] => text 
          [id] => 8699636 
         ) 

        [0] => bfxgbfgxbfbgxfsfsdf 
       ) 

     ) 

     [2] => Array 

     (
      [0] => SimpleXMLElement Object 
       (
        [@attributes] => Array 
         (
          [data_type] => text 
         ) 

        [0] => Aug 01, 2011 
       ) 

      [1] => SimpleXMLElement Object 
       (
        [@attributes] => Array 
         (
          [data_type] => text 
          [id] => 8699694 
         ) 

        [0] => bfxgbfgxbfbgxf 
       ) 

     ) 
) 

希望的輸出(外推每增加列和刪除@屬性):

array(
array("date","name"), 
array("Aug 01, 2011","bfxgbfgxbfbgxfsfsdf"), 
array("Aug 01, 2011","bfxgbfgxbfbgxf") 
) 
+0

很難想象你在找什麼 – ajreal

回答

0

回答我自己的問題,因爲我可能沒有很好地解釋它,但指定一個(字符串)讓我到我需要的地方。

0

嘗試改變

foreach ($xml->RESPONSE->DATA->HEADER->COLUMN as $column) { 

t o

$columns = (array)$xml->RESPONSE->DATA->HEADER->COLUMN; 
foreach ($columns as $column) { 

這應該將SimpleXML對象轉換爲簡單數組。應該刪除「開銷」。對foreach ($row->COLUMN as $datacolvalue){執行相同操作。

+0

謝謝@Zearkus,但是這樣做(假設我沒有錯誤地實現它)會導致結構和數據的丟失。我得到的第一列只返回,所以間隔後跟日期,但沒有別的。現在檢查我的代碼.... – Dan

+0

如果您需要這些屬性,爲什麼不重複它們並創建一個數組?否則,執行像'$ data_row [] = array_merge((array)$ datacolvalue,(array)$ datacolvalue-> attributes())'也可以。 – Znarkus

+0

(對不起 - 發生了一些有線格式化),這是我不需要的最內在屬性,例如@屬性。從第一個內部數組中,我需要字符串的日期和'名稱'的標題行。然後從下一行我需要每個值。我在開場白中發佈了一個例子。謝謝。 – Dan