Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 按一定规则对查询结果进行随机排序(usort)_Php_Mysql_Arrays_Sorting_Usort - Fatal编程技术网

Php 按一定规则对查询结果进行随机排序(usort)

Php 按一定规则对查询结果进行随机排序(usort),php,mysql,arrays,sorting,usort,Php,Mysql,Arrays,Sorting,Usort,我得到一个房间数组(mysql\u fetch\u assoc())作为mysql查询的结果。我想“随机”排列这个数组,但有一个规则。每个房间的编号不能比下一个房间的编号高或低2个 现在我想我应该用usort来做这件事,但我似乎不明白。我已经看了很多关于usort的问题和解释,但我就是搞不清楚。我相信这不会像我现在经历的那样困难 这就是我现在正在尝试的 shuffle($room_array); function cmp($a, $b){ if ($a["room"] == $b["r

我得到一个房间数组(mysql\u fetch\u assoc())作为mysql查询的结果。我想“随机”排列这个数组,但有一个规则。每个房间的编号不能比下一个房间的编号高或低2个

现在我想我应该用usort来做这件事,但我似乎不明白。我已经看了很多关于usort的问题和解释,但我就是搞不清楚。我相信这不会像我现在经历的那样困难

这就是我现在正在尝试的

shuffle($room_array);

function cmp($a, $b){
    if ($a["room"] == $b["room"] || $a["room"]+2 == $b["room"]|| $a["room"]+1 == $b["room"]|| $a["room"]-2 == $b["room"]|| $a["room"]-1 == $b["room"]){
   return 1;
   }else return 0;
}

usort($room_array, "cmp");
非常感谢

试试这个:

function cmp ($a, $b){
    return $b - $a; 
}
usort($room_array, 'cmp');

谢谢你的回复!用$b['room']和$a['room']试过了,但没用。列表中有三个数组。一个有1、3或5房间的。这意味着我应该得到1-3-5,3-1-5或5-3-1,。。。但是我仍然偶尔得到5-1-3或3-1-5,所以差距比2大。这确实使他们的顺序正确,但他们现在总是下降(5-3-1)。我希望顺序是随机的,以便在扩展数据库时也可以出现1-3-5或其他变化。@Jorgos
3-1-5
这里1-5差异大于2,这是为什么?是的,这是个错误。我想这三种选择只有1-3-5和5-3-1。但我需要一些可以扩展到更多值的东西,并且每次都是随机的。@Jorgos实际上是在降序/升序排序的上下文中。