PHP 二维数组根据另一个二维数组的值进行排序
二维数组根据另一个二维数组的某个值进行排序
例子:有以下两个二维数组
goods:道具数组,记录了道具id、道具名称、道具价值
goodsUseTimes:道具使用数组,记录了道具id和道具被使用的次数
需求:道具数组需要按道具被使用次数进行排序
// 需要排序的数组
$goods = [
[
'goods_id' => 1001,
'goods_name' => '气球',
'goods_value' => 32
],
[
'goods_id' => 1005,
'goods_name' => '元宝',
'goods_value' => 1
],
[
'goods_id' => 1017,
'goods_name' => '钻石',
'goods_value' => 432
],
[
'goods_id' => 1066,
'goods_name' => '金币',
'goods_value' => 666
]
];
// 排序数组模板
$goodsUseTimes = [
[
'goods_id' => 1001,
'use_times' => 344
],
[
'goods_id' => 1005,
'use_times' => 2
],
[
'goods_id' => 1017,
'use_times' => 63
],
[
'goods_id' => 1066,
'use_times' => 27
],
[
'goods_id' => 2066,
'use_times' => 683
],
[
'goods_id' => 2042,
'use_times' => 45
]
];
// 合并数组
$arr = array_column($goodsUseTimes, 'use_times', 'goods_id');
foreach ($goods as &$v) {
$v['goods_use_times'] = isset($arr[$v['goods_id']]) ? $arr[$v['goods_id']] :0;
}
// 排序,升序:SORT_ASC,降序:SORT_DESC
$useTimes = array_column($goods, 'goods_use_times');
array_multisort($useTimes,SORT_DESC,$goods);
print_r($goods);
输出结果
Array
(
[0] => Array
(
[goods_id] => 1001
[goods_name] => 气球
[goods_value] => 32
[goods_use_times] => 344
)
[1] => Array
(
[goods_id] => 1017
[goods_name] => 钻石
[goods_value] => 432
[goods_use_times] => 63
)
[2] => Array
(
[goods_id] => 1066
[goods_name] => 金币
[goods_value] => 666
[goods_use_times] => 27
)
[3] => Array
(
[goods_id] => 1005
[goods_name] => 元宝
[goods_value] => 1
[goods_use_times] => 2
)
)
PS:两个二维数组之间需要存在相同的字段才可以进行排序