我已经通过Simple XML
获得了RSS供稿。
我已将其从arrays
/ objects
更改为所有array
。
我想将输出随机排列,但是出于某种原因,它总是以日期为基础。
我下面的代码以及我的print_r
语句
PHP
$xml = simplexml_load_file($feed);
$order = 1;
$videoFeed = json_decode(json_encode(array($xml)), true);
if ($order == 1) {
shuffle ( $videoFeed );
}
print_r($videoFeed);
Print_r($ videoFeed)
Array
(
[0] => Array
(
[link] => Array
(
[@attributes] => Array
(
[rel] => self
[href] => https://www.youtube.com/feeds/videos.xml?playlist_id=PLx0GbZ0m42LqeIybI2x_bBLGlo85-5VNg
)
)
[id] => yt:playlist:PLx0GbZ0m42LqeIybI2x_bBLGlo85-5VNg
[title] => Best Joomla! Videos
[author] => Array
(
[name] => Eoin Oliver
[uri] => https://www.youtube.com/channel/UCGkX76DCQlWTdjP3CWNbC-A
)
[published] => 2019-06-28T17:37:33+00:00
[entry] => Array
(
[0] => Array
(
[id] => yt:video:fouYgPJR5Jc
[title] => JD19AT - Optimizing the Joomla back-end
[link] => Array
(
[@attributes] => Array
(
[rel] => alternate
[href] => https://www.youtube.com/watch?v=fouYgPJR5Jc
)
)
[author] => Array
(
[name] => J and Beyond e.V.
[uri] => https://www.youtube.com/channel/UCy6ThiEDnalZOd_pgtpBk1Q
)
[published] => 2019-03-30T16:25:40+00:00
[updated] => 2019-04-09T20:16:34+00:00
)
[1] => Array
(
[id] => yt:video:70Kx00H_cLI
[title] => JD19AT - KEYNOTE - Introducing Joomla 4 for Content Creators
[link] => Array
(
[@attributes] => Array
(
[rel] => alternate
[href] => https://www.youtube.com/watch?v=70Kx00H_cLI
)
)
[author] => Array
(
[name] => J and Beyond e.V.
[uri] => https://www.youtube.com/channel/UCy6ThiEDnalZOd_pgtpBk1Q
)
[published] => 2019-03-30T08:55:39+00:00
[updated] => 2019-04-29T13:10:49+00:00
)
~
提要有效,但总是顺序相同。我误解了$shuffle
函数吗?
答案 0 :(得分:1)
问题是您在写入array($xml)
时向数据添加了额外级别的数组容器。因此,$videoFeed
中只有一个元素,重新排序没有任何作用。
尝试
$videoFeed = json_decode(json_encode($xml), true);
然后,问题在于提要项不是此数据的顶层,它们在数组的entry
元素中。所以你应该这样做:
if ($order == 1) {
shuffle($videoFeed['entry']);
}
为避免过度使用['entry']
和避免array_chunk
出现问题,可以将数组上移一个步骤。首先使其成为阵列,以防将来需要阵列的任何部分。然后像这样向上移动:
$videoFeed = json_decode(json_encode($xml), true);
$videoFeedEntry = $videoFeed['entry'];
if ($order == 1) {
shuffle($videoFeedEntry);
}