2013-04-09 153 views
0

所以我有這個XML,我漫步,我可以通過它很好地移動。我想動態創建是這樣的關聯數組:PHP動態創建XML關聯數組

$keyName => $valName 

下面是XML的樣子:

<dict> 
    <key>Major Version</key><integer>1</integer> 
    <key>Minor Version</key><integer>1</integer> 
    <key>Application Version</key><string>7.6.1</string> 
    <key>Tracks</key> 
    <dict> 
     <key>0</key> 
     <dict> 
     <key>Track ID</key><integer>0</integer> 
     <key>Name</key><string>American Idol 2013</string> 
     <key>Artist</key><string>Amber Holcomb</string> 
     <key>Album Artist</key><string>Amber Holcomb</string> 
     <key>Album</key><string>Unknown Album</string> 
     <key>Kind</key><string>MPEG audio file</string> 
     <key>Size</key><integer>3645</integer> 
     <key>Total Time</key><integer>233000</integer> 
     <key>Date Modified</key><date>Thu Mar 14 12:11:12 2013</date> 
     <key>Date Added</key><date>Thu Apr 04 16:10:15 2013</date> 
     <key>Bitrate</key><integer>128</integer> 
     <key>Location</key><string>file://localhost/Z:%5Canthony%5CMusic%5CiTunes%5CiTunes%20Media%5CMusic%5CUnknown%20Artist%5CUnknown%20Album%5CAmber%20Holcomb%20-%20A%20Moment%20Like%20This%20-%20Studio%20Version%20-%20American%20Idol%202013.mp3</string> 
     <key>File Folder Count</key><integer>-1</integer> 
     <key>Library Folder Count</key><integer>-1</integer> 
     </dict> 

和這裏就是我得到了我的代碼至今:

$xml = simplexml_load_file(base_url().'uploads/xmlbackup2.xml'); 
     $varKey = $xml->dict[0]->dict[0]->dict[0]->children(); 

     $keyName =""; 
     $valName =""; 



foreach($xml->dict[0]->dict[0]->dict as $dict1){ 

      foreach($dict1->children() as $dictChild){ 

       if($dictChild->getName() == "key"){ 
        $keyName = $dictChild; 
       } else { 
        $valName = $dictChild; 
       } 



      } 

     } 

我已經嘗試了一些東西,如創建兩個數組並嘗試合併它們......但它只是對我而言失敗,很可能是我的代碼沒有正確完成。

基本上,在第二個foreach循環完成之後,我要做的是將數據放入SQL中。不過,我需要首先創建關聯以使其在codeigniter中工作。

+0

您是否使用simpleXML? – Svetoslav 2013-04-09 05:02:58

+0

@svetlio - 是的,我更新了我的代碼以反映這一點。謝謝。 – 2013-04-09 05:06:39

+0

http://www.php.net/manual/en/function.simplexml-load-string.php#102277試試這個..它可能會幫助您 – Svetoslav 2013-04-09 05:10:40

回答

2

這是什麼東西就像你在找什麼?

$myArray = Array(); 
$currentKey;  
foreach($xml->dict[0] as $dict1){ 
    foreach($dict1->children() as $dictChild){ 
     if($dictChild->getName() == "key"){ 
      $currentKey = $dictChild; 
     } else { 
      $myArray[(string)$currentKey] = (string)$dictChild; 
     } 
    } 
} 

UPDATE 我測試出來的代碼,我得到的是你得到的警告。鑄造到字符串似乎解決了這一問題。以下是我所做的示例文件和我得到的輸出。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

$myArray = Array(); 
$currentKey; 

$xml; 
if (file_exists('test.xml')) 
    $xml = simplexml_load_file('test.xml'); 

foreach($xml->dict[0] as $dict1){ 
    foreach($dict1->children() as $dictChild){ 
     if($dictChild->getName() == "key"){ 
      $currentKey = $dictChild; 
     } else { 
      $myArray[(string)$currentKey] = (string)$dictChild; 
     } 
    } 
} 

print '<pre>'; 
print_r($myArray); 
print '</pre>'; 

?> 

Array 
(
    [Track ID] => 0 
    [Name] => American Idol 2013 
    [Artist] => Amber Holcomb 
    [Album Artist] => Amber Holcomb 
    [Album] => Unknown Album 
    [Kind] => MPEG audio file 
    [Size] => 3645 
    [Total Time] => 233000 
    [Date Modified] => Thu Mar 14 12:11:12 2013 
    [Date Added] => Thu Apr 04 16:10:15 2013 
    [Bitrate] => 128 
    [Location] => file://localhost/Z:%5Canthony%5CMusic%5CiTunes%5CiTunes%20Media%5CMusic%5CUnknown%20Artist%5CUnknown%20Album%5CAmber%20Holcomb%20-%20A%20Moment%20Like%20This%20-%20Studio%20Version%20-%20American%20Idol%202013.mp3 
    [File Folder Count] => -1 
    [Library Folder Count] => -1 
) 
+0

也許這是它。現在要把它... BRB – 2013-04-09 05:08:42

+0

所以,我想這一點,我得到: 一個PHP錯誤遇到 嚴重性:警告 消息:非法偏移類型 文件名:控制器/ xml.php 行號:22 -------- 行號22指向$ myArray [$ currentKey] = $ dictChild; – 2013-04-09 05:11:05

+0

YUP YUP!非常感謝你的幫助,這很有效!我之前嘗試過,但從未嘗試過(字符串)。再次感謝! :) – 2013-04-09 05:28:40