如何使用PHP对嵌套命名空间数组中的值进行数组排序

如何使用PHP对嵌套命名空间数组中的值进行数组排序,php,arrays,xml,sorting,namespaces,Php,Arrays,Xml,Sorting,Namespaces,我已经从一个xml文件生成了一个数组。该文件是来自许多youtube频道的视频信息。现在,我想用PHP按video:publication\u date(降序)对数组进行排序。我的目标是识别和显示xml文件中包含的所有频道的最新10个视频 如何做到这一点 我见过许多对简单数组进行排序的解决方案,但我不知道如何让它们对嵌套命名空间数组中的值进行排序,例如使用PHP的[video:video] print\r($array)输出如下所示: Array ( [urlset] => Arr

我已经从一个xml文件生成了一个数组。该文件是来自许多youtube频道的视频信息。现在,我想用PHP按
video:publication\u date
(降序)对数组进行排序。我的目标是识别和显示xml文件中包含的所有频道的最新10个视频

如何做到这一点

我见过许多对简单数组进行排序的解决方案,但我不知道如何让它们对嵌套命名空间数组中的值进行排序,例如使用PHP的
[video:video]

print\r($array)输出如下所示:

Array
(
    [urlset] => Array
        (
            [url] => Array
                (
                    [0] => Array
                        (
                            [loc] => http://www. . . ./vod_page.php?channel=XXxxbnaoqvqbGpCcW9t3V1jQ&vid=xxxQSNyiwMk
                            [video:video] => Array
                                (
                                    [video:thumbnail_loc] => https://i.ytimg.com/vi/xxxQSNyiwMk/hqdefault.jpg
                                    [video:title] => Singing
                                    [video:description] => Show
                                    [video:player_loc] => http://www. . . ./jw57player.swf?file=http://www.youtube.com/watch?v=xxxQSNyiwMk
                                    [video:duration] => 162
                                    [video:view_count] => 38
                                    [video:publication_date] => 2014-12-10T16:01:08.000Z
                                )

                        )

                    [1] => Array
                        (
                            [loc] => http://www. . . ./vod_page.php?channel=XXxxbnaoqvqbGpCcW9t3V1jQ&vid=xxxeDipW7PU
                            [video:video] => Array
                                (
                                    [video:thumbnail_loc] => https://i.ytimg.com/vi/xxxeDipW7PU/hqdefault.jpg
                                    [video:title] => Singing Live
                                    [video:description] => Performing Nov.18th 2014
                                    [video:player_loc] => http://www. . . ./jw57player.swf?file=http://www.youtube.com/watch?v=xxxeDipW7PU
                                    [video:duration] => 244
                                    [video:view_count] => 265
                                    [video:publication_date] => 2014-12-09T11:14:00.000Z
                                )

                        )

                    [2] => Array
                        (
                            [loc] => http://www. . . ./vod_page.php?channel=XXxxbnaoqvqbGpCcW9t3V1jQ&vid=xxxyvRH4NEg
                            [video:video] => Array
                                (
                                    [video:thumbnail_loc] => https://i.ytimg.com/vi/xxxyvRH4NEg/hqdefault.jpg
                                    [video:title] => Making
                                    [video:description] => Performing Nov.15th 2015
                                    [video:player_loc] => http://www. . . ./jw57player.swf?file=http://www.youtube.com/watch?v=xxxyvRH4NEg
                                    [video:duration] => 222
                                    [video:view_count] => 79
                                    [video:publication_date] => 2014-12-09T00:03:06.000Z
                                )

                        )
                    ....

考虑以下使用,它需要一个较低级别的关联数组来对较大的数组进行排序。此解决方案甚至允许为其他排序字段留出空间

复制阵列(请注意,我故意错误地安排了演示的发布日期):

实际分拣代码

# TO CREATE SORTING ARRAY, $pubdate
$pubdate = array();
foreach ($youtube['urlset']['url'] as $ykey => $yvalue) {        
    $pubdate[] = $yvalue['video:video']['video:publication_date'];
}

# APPLYING SORTING TO ARRAY AT URL LEVEL
array_multisort($pubdate, SORT_DESC, $youtube['urlset']['url']);
输出(请注意,2014-12-10原来位于底部,因为URL[2]现在位于顶部,因为URL[0]是最近的日期)


使用
usort
并提供一个比较函数,将
$arg1['video:video']['video:publication\u date']
$arg2['video:video']['video:publication\u date']['video:publication\u date']
进行比较,
我认为可以简化foreach($yvalue as$vkey=>$vvalue){…}
循环体到
$pubdate[]=$yvalue['video:video']['video:publication_date'];
很好的建议!但事实上,你的建议在每个日期都增加了一倍,留下了6个日期项。但是删除了内部的
foreach()
循环,效果很好!我很感激。
# TO CREATE SORTING ARRAY, $pubdate
$pubdate = array();
foreach ($youtube['urlset']['url'] as $ykey => $yvalue) {        
    $pubdate[] = $yvalue['video:video']['video:publication_date'];
}

# APPLYING SORTING TO ARRAY AT URL LEVEL
array_multisort($pubdate, SORT_DESC, $youtube['urlset']['url']);
Array
(
    [urlset] => Array
        (
            [url] => Array
                (
                    [0] => Array
                        (
                            [loc] => http://www. . . ./vod_page.php?channel=XXxxbnaoqvqbGpCcW9t3V1jQ&vid=xxxQSNyiwMk
                            [video:video] => Array
                                (
                                    [video:thumbnail_loc] => https://i.ytimg.com/vi/xxxQSNyiwMk/hqdefault.jpg
                                    [video:title] => Singing
                                    [video:description] => Show
                                    [video:player_loc] => http://www. . . ./jw57player.swf?file=http://www.youtube.com/watch?v=xxxQSNyiwMk
                                    [video:duration] => 162
                                    [video:view_count] => 38
                                    [video:publication_date] => 2014-12-10CDT16:01:08.000-18000
                                )

                        )

                    [1] => Array
                        (
                            [loc] => http://www. . . ./vod_page.php?channel=XXxxbnaoqvqbGpCcW9t3V1jQ&vid=xxxeDipW7PU
                            [video:video] => Array
                                (
                                    [video:thumbnail_loc] => https://i.ytimg.com/vi/xxxeDipW7PU/hqdefault.jpg
                                    [video:title] => Singing Live
                                    [video:description] => Performing Nov.18th 2014
                                    [video:player_loc] => http://www. . . ./jw57player.swf?file=http://www.youtube.com/watch?v=xxxeDipW7PU
                                    [video:duration] => 244
                                    [video:view_count] => 265
                                    [video:publication_date] => 2014-12-09CDT11:14:00.000-18000
                                )

                        )

                    [2] => Array
                        (
                            [loc] => http://www. . . ./vod_page.php?channel=XXxxbnaoqvqbGpCcW9t3V1jQ&vid=xxxyvRH4NEg
                            [video:video] => Array
                                (
                                    [video:thumbnail_loc] => https://i.ytimg.com/vi/xxxyvRH4NEg/hqdefault.jpg
                                    [video:title] => Making
                                    [video:description] => Performing Nov.15th 2015
                                    [video:player_loc] => http://www. . . ./jw57player.swf?file=http://www.youtube.com/watch?v=xxxyvRH4NEg
                                    [video:duration] => 222
                                    [video:view_count] => 79
                                    [video:publication_date] => 2014-12-09CDT00:03:06.000-18000
                                )

                        )

                )

        )

)