如何从这个数组返回一些数据?

时间:2012-06-18 12:18:58

标签: php xml rss preg-match

我有以下数据:

<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
)

上面的数组只是我想要返回数据的一个例子。

我该怎么做?这些信息有时会发生变化,并且还会有其他事情发生。

由于

3 个答案:

答案 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);