//shuffle - 随机打乱数组,这将删除原有的键名,而不是仅仅将键名重新排序。
使用shuffle随机打乱数组的话会删除原有的键名,如下例所示:
$numbers = range(1,5);
var_dump($numbers);
shuffle($numbers);
foreach($numbers as $key => $number){
echo "$key = $number\n";
}
/**
原数组打印结果
array(5) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(4)
[4]=>
int(5)
}
随机打乱后的结果
0 = 2
1 = 5
2 = 4
3 = 3
4 = 1
*/
我们可以转换一下,获取数组的键名,随机打乱键名,在获取对应的数据,如下所示:
//对于关联数组,shuffle保留key=>value对。
function shuffle_assoc($array){
$new = array();
$keys_array = array_keys($array);
shuffle($keys_array);
foreach($keys_array as $key => $value){
$new[$value] = $array[$value];
}
return $new;
}
$numbers = range(1,5);
$result = shuffle_assoc($numbers);
var_dump($result);
/**
输出结果:
array(5) {
[3]=>
int(4)
[0]=>
int(1)
[2]=>
int(3)
[4]=>
int(5)
[1]=>
int(2)
}
从结果可以看出保留了原来的键名随机打乱数组
*/