Php 5.2.10+;

Php 5.2.10+;,php,arrays,shuffle,Php,Arrays,Shuffle,我最近刚刚将我的PHP更新为一个新版本,并发现它使我的一些旧的、曾经的功能代码变得无用。也就是说,由于v5.2.10使用了array_rand,“生成的密钥数组不再被洗牌”,问题就出在这里 以下代码不再工作,也就是说,它不再像以前那样随机洗牌: $in = array('foo_1|bar_1', 'foo_2|bar_2','foo_3|bar_3','foo_4|bar_4','foo_5|bar_5' ); foreach($in as &$r){ $r = explode("|

我最近刚刚将我的PHP更新为一个新版本,并发现它使我的一些旧的、曾经的功能代码变得无用。也就是说,由于v5.2.10使用了array_rand,“生成的密钥数组不再被洗牌”,问题就出在这里

以下代码不再工作,也就是说,它不再像以前那样随机洗牌:

$in = array('foo_1|bar_1', 'foo_2|bar_2','foo_3|bar_3','foo_4|bar_4','foo_5|bar_5' );

foreach($in as &$r){
$r = explode("|", $r);  
}

$rand = array_rand($in, 3);

//OUTPUTS:

$in[$rand[0]][0] //foo_1
$in[$rand[0]][1] //bar_1

$in[$rand[1]][0] //foo_3
$in[$rand[1]][1] //bar_3

$in[$rand[2]][0] //foo_5
$in[$rand[2]][1] //bar_5
你知道如何恢复同样的功能吗

谢谢。

经过
foreach($array as&$valueref){
循环后,您应该总是
unset($valueref);
否则您可能会遇到非常恼人和难以调试的问题(一旦您将某些东西分配给
$valueref
,这些东西在代码中的名称可能不太明显,您实际上是在修改最后一个数组元素)在
foreach($array as&$valueref){
循环之后,您应该总是
unset($valueref);
,否则您可能会遇到非常恼人和难以调试的问题(一旦您为
$valueref
分配了一些在代码中名称不太明显的内容,您实际上是在修改最后一个数组元素)
$rand = array_rand($in, 3);
shuffle($rand);