Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按值组洗牌数组_Php_Arrays_Sorting_Grouping_Shuffle - Fatal编程技术网

Php 按值组洗牌数组

Php 按值组洗牌数组,php,arrays,sorting,grouping,shuffle,Php,Arrays,Sorting,Grouping,Shuffle,我正在寻找一种在PHP中按值组洗牌数组的方法 例如,我有一个排序数组: Array ( [peter] => 100 [paul] => 100 [mary] => 50 [andrew] => 50 [bill] => 50 [jason] => 10 [sofia] => 10 ) 我想这样洗牌: Array ( [paul] => 100 [peter] => 1

我正在寻找一种在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的脏脚本吗?

使用这个用户定义的函数,你可以在排序之前洗牌数组

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);

我通过使用arsort和函数shuffle_assoc()找到了答案,该函数在本页的第一篇用户文章中描述:


澄清一下:你想先按值再按键排序,对吗?我们在同一时间发布了完全相同的答案:)谢谢你的帮助28秒差,很好。但我是第一个。(^)但您正在使用arsort.:^)不,你的答案是+1。我不会编辑我的答案。:^)
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);