我正在寻找一种通过PHP中的值组来对数组进行混洗的方法。
例如,我有一个排序数组:
Array
(
[peter] => 100
[paul] => 100
[mary] => 50
[andrew] => 50
[bill] => 50
[jason] => 10
[sofia] => 10
)
我想以这种方式改变它:
Array
(
[paul] => 100
[peter] => 100
[mary] => 50
[bill] => 50
[andrew] => 50
[jason] => 10
[sofia] => 10
)
你知道一个聪明的方法,或者我是否必须写一个基于foreach的脏脚本?
答案 0 :(得分:5)
使用此用户定义的函数shuffle_assoc,您可以在排序之前对数组进行随机播放。
function shuffle_assoc(&$array) {
$keys = array_keys($array);
shuffle($keys);
foreach($keys as $key) {
$new[$key] = $array[$key];
}
$array = $new;
return true;
}
$array = array('peter' => 100
, 'paul' => 100
, 'mary' => 50
, 'andrew' => 50
, 'bill' => 50
, 'jason' => 10
, 'sofia' => 10);
shuffle_assoc($array);
asort($array);
array_reverse($array);
var_dump($array);
答案 1 :(得分:4)
我通过使用arsort和本页第一个用户贡献中描述的函数shuffle_assoc()找到了答案:PHP: shuffle
function shuffle_assoc(&$array) {
$keys = array_keys($array);
shuffle($keys);
foreach($keys as $key) {
$new[$key] = $array[$key];
}
$array = $new;
return true;
}
$array = array(
'peter' => 100,
'paul' => 100,
'mary' => 50,
'andrew'=> 50,
'bill' => 50,
'jason' => 10,
'sofia' => 10
);
shuffle_assoc($array);
arsort($array);
print_r($array);