PHP动态创建XML关联数组
所以我有这个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中工作。
这是什么东西就像你在找什么?
$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
)
也许这是它。现在要把它... BRB – 2013-04-09 05:08:42
所以,我想这一点,我得到: 一个PHP错误遇到 严重性:警告 消息:非法偏移类型 文件名:控制器/ xml.php 行号:22 -------- 行号22指向$ myArray [$ currentKey] = $ dictChild; – 2013-04-09 05:11:05
YUP YUP!非常感谢你的帮助,这很有效!我之前尝试过,但从未尝试过(字符串)。再次感谢! :) – 2013-04-09 05:28:40
您是否使用simpleXML? – Svetoslav 2013-04-09 05:02:58
@svetlio - 是的,我更新了我的代码以反映这一点。谢谢。 – 2013-04-09 05:06:39
http://www.php.net/manual/en/function.simplexml-load-string.php#102277试试这个..它可能会帮助您 – Svetoslav 2013-04-09 05:10:40