0

我有以下代码:

$rss = simplexml_load_file( 'http://gdata.youtube.com/feeds/api/playlists/PLEA1736AA2720470C?v=2&prettyprint=true' );

foreach ( $rss->entry as $entry ) {
    // get nodes in media: namespace for media information
    $media = $entry->children( 'http://search.yahoo.com/mrss/' );
    $thumbs = $media->group->thumbnail;
    $thumb_attrs = array();
    $index = 0;
    // get thumbnails attributes: url | height | width
    foreach ( $thumbs as $thumb ) {
        foreach ( $thumb->attributes() as $attr => $value ) {
            $thumb_attrs[$index][$attr] = $value;
            print $attr . ': ' . $thumb_attrs[$index][$attr] . "| ";
        }
        $index++;
        print  "<br>";
    }
}

打印将输出:

url: http://i.ytimg.com/vi/te28_L-dO88/default.jpg| height: 90| width: 120| time: 00:00:49| 
...

来自具有以下格式的 xml 标记:

<media:thumbnail url='http://i.ytimg.com/vi/4l4rwvAPhfA/default.jpg' height='90' width='120' time='00:02:23.500' yt:name='default'/>
...

如何添加我没有进入数组的命名空间 yt name = 'default' 的属性?

如何从数组中获取所有宽度的最接近其他值的值?类似于PHP - 数组中的最近值,但考虑到我的数组是多维的。

4

1 回答 1

0

simplexml 和命名空间的问题在于您必须按名称访问任何命名空间元素或属性——也就是说,您不能说“给我所有属性而不管命名空间”。所以你必须做一些循环,依靠 simplexml 的命名空间工具:

$rss = simplexml_load_file( 'http://gdata.youtube.com/feeds/api/playlists/PLEA1736AA2720470C?v=2&prettyprint=true' );
$namespaces=$rss->getNameSpaces(true); // access all the namespaces used in the tree
array_unshift($namespaces,""); // add a blank at the beginning of the array to deal with the unprefixed default
foreach ( $rss->entry as $entry ) {
    // get nodes in media: namespace for media information
    $media = $entry->children( 'http://search.yahoo.com/mrss/' );
    $thumbs = $media->group->thumbnail;
    $thumb_attrs = array();
    $index = 0;
    // get thumbnails attributes: url | height | width
    foreach ( $thumbs as $thumb ) {
        $attrstring="";
        foreach ($namespaces as $ns) {
                foreach ( $thumb->attributes($ns) as $attr => $value ) { // get all attributes, whatever namespace they might be in
                        $thumb_attrs[$index][$attr] = $value;
                        $attrstring.=$attr . ': ' . $thumb_attrs[$index][$attr] . "| ";
                }
        }
        print $attrstring;
        $index++;
        print  "<br>";
    }
}

至于你问题的第二部分,我不是 100% 确定你在问什么。如果它确实与您链接到的问题相似,那么您是否只能在循环之前创建一个空数组,并将每个条目的宽度添加到该数组中?循环完成后,您将拥有一个仅包含宽度的扁平数组。

但是,如果您要问其他问题,也许您可​​以澄清一下?

于 2013-04-19T04:56:34.613 回答