有以下数据,按照男女,age排序,同样的年纪按height身高排序

有user表
id 自增userid
gender 性别 1男 2女
age 年龄
height 身高
+-----+--------------------------------------------+
| id |gender|age| height
+-----+--------------------------------------------+
| 138 | 1  |  6 | 80
+-----+--------------------------------------------+
| 139 | 2  |  2 | 42
+-----+--------------------------------------------+
| 140 | 1  |  3 | 52
+-----+--------------------------------------------+
| 150 | 2  |  3 | 51
+-----+--------------------------------------------+
| 160 | 1  |  2 | 41
+-----+--------------------------------------------+
| 171 | 2  |  4 | 70
+-----+--------------------------------------------+
如果用sql的话,
select * from user order by gender ASC,age ASC;

那么如何用php数组实现一个类似的order by功能呢

假设取出的结果集为$users 数组,我们用array_multisort 做多维数组排序
$users = [
    ['id'=>138,'gender'=>1,'age'=>6,'height'=>80],
    ['id'=>139,'gender'=>2,'age'=>2,'height'=>42],
    ['id'=>140,'gender'=>1,'age'=>3,'height'=>52],
    ['id'=>150,'gender'=>2,'age'=>3,'height'=>51],
    ['id'=>160,'gender'=>1,'age'=>2,'height'=>41],
    ['id'=>171,'gender'=>2,'age'=>4,'height'=>70],
];

$genders = $ages = $heights =[];
foreach ($users as $index => $user){
    $genders[$index] = $user['gender'];
    $ages[$index] = $user['age'];
    $heights[$index] = $user['height'];
}
array_multisort($genders,SORT_ASC,$ages,SORT_ASC,$heights,SORT_ASC,$users);

排序后新的$users为

  id   | gender   | age | height
-------+--------+------+---- ----
    160 |    1  |   2  |  41
    140 |    1  |   2  |  52
    138 |    1  |   6  |  80
    139 |    2  |   2  |  42
    171 |    2  |   3  |  50
    150 |    2  |   3  |  51

谢谢您的观看,欢迎关注我的公众号。

image.png


海生
104 声望34 粉丝

与黑夜里,追求那一抹萤火。


« 上一篇
yii队列