Php 洗牌不会改变顺序

Php 洗牌不会改变顺序,php,shuffle,Php,Shuffle,我通过简单的XML获得了一个RSS提要。 我已将其从数组/对象更改为所有数组 我想将输出按随机顺序洗牌,但出于某种原因,它总是按基于日期的顺序 下面是我的代码以及我的打印声明 PHP 打印\r$videoFeed feed可以工作,但总是以相同的顺序。我是否误解了$shuffle函数?问题在于,在编写数组$xml时,您正在向数据中添加额外级别的数组容器。所以$videoFeed中只有一个元素,而重新排序没有任何效果 试一试 然后问题是提要项不是该数据的顶层,它们位于数组的entry元素中。所以你

我通过简单的XML获得了一个RSS提要。 我已将其从数组/对象更改为所有数组

我想将输出按随机顺序洗牌,但出于某种原因,它总是按基于日期的顺序

下面是我的代码以及我的打印声明

PHP

打印\r$videoFeed


feed可以工作,但总是以相同的顺序。我是否误解了$shuffle函数?

问题在于,在编写数组$xml时,您正在向数据中添加额外级别的数组容器。所以$videoFeed中只有一个元素,而重新排序没有任何效果

试一试

然后问题是提要项不是该数据的顶层,它们位于数组的entry元素中。所以你应该:

if ($order == 1) {
    shuffle($videoFeed['entry']);
}
为了避免过度使用['entry'],并避免数组块出现问题,可以将数组上移一步。首先将其设置为阵列,以防将来需要阵列的任何部分。然后向上移动一步,如下所示:

$videoFeed      = json_decode(json_encode($xml), true); 
$videoFeedEntry = $videoFeed['entry'];
if ($order == 1) {
    shuffle($videoFeedEntry);
}

if$order=1应为if$order==1。但这不会引起你的问题。另外,$videoFeed包含什么?是的,顺序实际上不在我的代码中,而是由用户动态设置的。但我补充说,为了避免评论认为这就是答案。看来我还是发表了评论哈哈。哎呀。更正,谢谢。$videoFeed只有一个元素,$xml的值。用1个元素洗牌数组没有任何作用。@Eoin他说的不是$order==1行,而是if语句。它是用=赋值,而不是用==测试。调用json_decode和json_encode有什么意义?它本质上与执行$videoFeed=array$xml相同;这样做会产生更多错误:注意:第76行/default.php中未定义的偏移量:0警告:array\u chunk期望参数1为array,第76行/default.php中为null警告:第78 76行default.php中为foreach提供的参数无效:$arrayChunks=array\u chunk$videoFeed[0]['entry'],4;78:foreach$arrayChunks as$items{如果我将其更改回json_decodejson_encodearray$xml,则会收到警告:shuffle预期参数1为数组,在第69行的/default.php中给出null如果这样做,则需要执行shuffle$videoFeed[0]['entry']您正在添加一个额外的数组分组,因此必须使用额外级别的索引。shuffle预期参数1为array&array_chunk预期参数1为array&为foreach提供的参数无效
$videoFeed   = json_decode(json_encode($xml), true); 
if ($order == 1) {
    shuffle($videoFeed['entry']);
}
$videoFeed      = json_decode(json_encode($xml), true); 
$videoFeedEntry = $videoFeed['entry'];
if ($order == 1) {
    shuffle($videoFeedEntry);
}