我有以下数据:
<media:group>
<media:content url="http://www.url.com" bitrate="450" width="320" duration="32" />
<media:content url="http://www.url.com" bitrate="212" width="320" duration="32" />
</media:group>
我想搜索一遍并形成一个像这样的数组:
Array (
[0] =>
[url] => http://www.url.com,
[bitrate] => 459,
[width] => 320,
[duration] => 32
[1] =>
[url] => http://www.url.com,
[bitrate] => 212,
[width] => 320,
[duration] => 32
)
上面的数组只是我想要返回数据的一个例子。
我该怎么做?这些信息有时会发生变化,并且还会有其他事情发生。
由于
答案 0 :(得分:1)
您应该尝试SimpleXML。示例#5涵盖了XML元素的类似数组访问的属性。
答案 1 :(得分:1)
这样可行。
<?php
$xml = '<media_group>
<media_content url="http://www.url.com" bitrate="450" width="320" duration="32" />
<media_content url="http://www.url.com" bitrate="212" width="320" duration="32" />
</media_group>
';
$xml = simplexml_load_string($xml);
// do an xpath query and get all item id's
$result = $xml->xpath( '//media_content' );
$idList = array();
foreach($result as $key => $node) {
foreach($node->attributes() as $attr=>$value) {
$idList[$key][ (string)$attr ] = (string)$value;
}
}
print_r($idList);
?>
注意:我已将media:
更改为media_
,因为我不知道您对media
使用的命名空间。为此,您必须先使用registerXpathNamespace,然后才能处理代码。
希望这有帮助。
答案 2 :(得分:0)
preg_match_all("@url\=\"(?P<url>.*?)\"\s+bitrate\=\"(?P<bitrate>.*?)\"\s+width\=\"(?P<width>.*?)\"\s+duration=\"(?P<duration>.*?)\"@msi", $sYourString, $aResult, PREG_SET_ORDER);
或其他解决方案:
首先将所有项目分开,然后逐个进行,并获得所有属性。
$aMyFullResult = array();
preg_match_all("@<media:content(?P<substring>.*?)/>@msi", $sYourString, $aResults, PREG_SET_ORDER);
foreach ($aResults as $iKey=>$aOneRow)
preg_match_all("@\s+(\w+)\=\"(.*?)\"\s+@msi", $aOneRow['substring'], $aMyFullResult[], PREG_SET_ORDER);
print_r($aMyFullResult);