PHP 数组排序 array_multisort 一个奇怪case
2018-08-03 12:33:28 小德 PHP 访问次数 596

有个抽奖的场景,有若干个奖品,奖品有抽奖概率,抽奖逻辑是利率从小到大逐个抽奖,如果两个利率相同的奖品则随机没有现有顺序。

PHP的方法array_multisort 可对数组指定利率排序;shuffle()可对在排序前将相同的利率的奖品随机。

$ret  = [
    ['rate' => 3,'d' => 'addd'],
    ['rate' => 1,'d' =>'000bsdfs'],
    ['rate' => 3,'d' =>'csdfsd'],
    ['rate' => 1,'d' =>'dsdfasda'],
    ['rate' => 1,'d' =>'231'],
    ['rate' => 3,'d' =>'fsdfs'],
];
shuffle($ret);
array_multisort(array_column($ret,'rate'),SORT_ASC,$ret);
var_export($ret);exit;

理论上是可行的,可是每次结果都一样。(数组排序方法底层?。。。。)

无奈之下,将排序数组col 不做随机。就可以让排序后得数组,相同利率随机了

j$ret  = [
    ['rate' => 3,'d' => 'addd'],
    ['rate' => 1,'d' =>'000bsdfs'],
    ['rate' => 3,'d' =>'csdfsd'],
    ['rate' => 1,'d' =>'dsdfasda'],
    ['rate' => 1,'d' =>'231'],
    ['rate' => 3,'d' =>'fsdfs'],
];
$col = array_column($ret,'rate');
shuffle($ret);
array_multisort($col,SORT_ASC,$ret);
var_export($ret);exit;