php二维数组根据多个键值的不同权重排序
完整代码如下
// 排序数组
$list = [
["symbol" => "astusdt", "close" => 9, "rate" => 10, "vol" => 5000, "is_check" => 0],
["symbol" => "atomusdt", "close" => 10, "rate" => 10, "vol" => 2000, "is_check" => 0],
["symbol" => "balusdt", "close" => 12, "rate" => 9, "vol" => 3000, "is_check" => 0],
["symbol" => "bandusdt", "close" => 12, "rate" => 9, "vol" => 2000, "is_check" => 0]
];
// 排序方式(按照 close, rate, vol 排序,权重 close > rate > vol)
// 假设data传值为
$data = [
'rate_sort' => 'asc',
'close_sort' => 'asc',
'vol_sort' => 'asc',
];
$arr = [];
if (isset($data['close_sort']) && $data['close_sort'] != '') {
$arr[] = ['name' => 'close', 'type' => $data['close_sort']];
}
if (isset($data['rate_sort']) && $data['rate_sort'] != '') {
$arr[] = ['name' => 'rate', 'type' => $data['rate_sort']];
}
if (isset($data['vol_sort']) && $data['vol_sort'] != '') {
$arr[] = ['name' => 'vol', 'type' => $data['vol_sort']];
}
// 查询的根据给定的顺序排序
$newArr = [];
$sortMethods = ['vol', 'rate', 'close'];
foreach ($sortMethods as $v) {
foreach ($arr as $v2) {
if ($v2['name'] == $v) {
$newArr[] = $v2;
}
}
}
foreach ($newArr as $k => $v) {
$name = $v['name'];
$type = $v['type'];
uasort($list, function ($a, $b) use ($name, $type) {
if ($a == $b) return 0;
if ($type == 'asc') {
return $a[$name] < $b[$name] ? -1 : 1;
} else {
return $a[$name] < $b[$name] ? 1 : -1;
}
});
}
print_r($list);