php二维数组根据多个键值的不同权重排序

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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值