PHP多维数组按weight排序且相同权重元素随机排序实现方法
解决方案
直接修改uasort的回调逻辑即可,保留原有按weight排序的规则,仅在权重值相等时返回随机比较结果,实现同权重元素随机排序的效果:
uasort($arr, function($a, $b) { // 原有的按weight升序排序逻辑 $weightCmpResult = $a['weight'] <=> $b['weight']; if ($weightCmpResult !== 0) { return $weightCmpResult; } // 权重相同时返回随机比较结果,实现随机排序 return mt_rand(-1, 1); });
逻辑说明
- 原有排序逻辑完全保留,权重不同的元素仍然按
weight值升序排列,不会破坏基础排序效果 - 权重相等时返回随机的-1、0或1,触发排序逻辑对同权重元素做随机位置调整
- 仍然使用
uasort函数,不会丢失数组原有的自定义键名
如果对随机安全性有要求,可将mt_rand(-1, 1)替换为PHP7+支持的random_int(-1, 1),随机效果更稳定。
内容的提问来源于stack exchange,提问作者Александр Грешников
相关产品推荐
相关产品推荐

