在php中使用相同的数组键对多维数组排序
下面是我的多维数组: 我已经根据“等级”对数组进行了排序,并得到了结果。 此排序数组再次需要基于“grade”键按“timetake”排序 ex:have grade=1.75,应按时间键排序。等级=2.50应该更高,因为它高于1.75在php中使用相同的数组键对多维数组排序,php,sorting,multidimensional-array,Php,Sorting,Multidimensional Array,下面是我的多维数组: 我已经根据“等级”对数组进行了排序,并得到了结果。 此排序数组再次需要基于“grade”键按“timetake”排序 ex:have grade=1.75,应按时间键排序。等级=2.50应该更高,因为它高于1.75 $testing_data = array( 0 => array( "fullname" => ' Shoping0000000000', "g
$testing_data = array(
0 => array(
"fullname" => ' Shoping0000000000',
"grade" => 2.5000,
"timetaken" => 15
),
1 => array(
"fullname" => ' Vennapureddy',
"grade" => 1.75000,
"timetaken" => 13
),
2 => array(
"fullname" => ' Shoping1111111',
"grade" => 1.75000,
"timetaken" => 11
),
3 => array(
"fullname" => ' Shoping2222222',
"grade" => 1.75000,
"timetaken" => 90
),
4 => array(
"fullname" => ' Shoping333333333',
"grade" => 1.7000,
"timetaken" => 15
),
5 => array(
"fullname" => ' Azmeera',
"grade" => 1.7000,
"timetaken" => 67
),
6 => array(
"fullname" => 'Admin User',
"grade" => 1.00,
"timetaken" => 180
),
7 => array(
"fullname" => ' Shoping444444444444',
"grade" => 1,
"timetaken" => 15
),
8 => array(
"fullname" => ' Shoping55555555555555555',
"grade" => 0.5000,
"timetaken" => 290
),
9 => array(
"fullname" => ' Shoping6666',
"grade" => 0.5000,
"timetaken" => 120
),
10 => array(
"fullname" => ' Shoping77777',
"grade" => 0.5000,
"timetaken" => 187
),
11 => array(
"fullname" => ' Shoping888888',
"grade" => 0.5000,
"timetaken" => 20
),
);
我的结果数组应该如下所示:
$testing_data = array(
0 => array(
"fullname" => ' Shoping0000000000',
"grade" => 2.5000,
"timetaken" => 15
),
1 => array(
"fullname" => ' Shoping1111111',
"grade" => 1.75000,
"timetaken" => 11
),
2 => array(
"fullname" => ' Vennapureddy',
"grade" => 1.75000,
"timetaken" => 13
),
3 => array(
"fullname" => ' Shoping2222222',
"grade" => 1.75000,
"timetaken" => 90
),
4 => array(
"fullname" => ' Shoping333333333',
"grade" => 1.7000,
"timetaken" => 15
),
5 => array(
"fullname" => ' Azmeera',
"grade" => 1.7000,
"timetaken" => 67
),
6 => array(
"fullname" => ' Shoping444444444444',
"grade" => 1,
"timetaken" => 15
),
7 => array(
"fullname" => 'Admin User',
"grade" => 1.00,
"timetaken" => 180
),
8 => array(
"fullname" => ' Shoping888888',
"grade" => 0.5000,
"timetaken" => 20
),
9 => array(
"fullname" => ' Shoping6666',
"grade" => 0.5000,
"timetaken" => 120
),
10 => array(
"fullname" => ' Shoping77777',
"grade" => 0.5000,
"timetaken" => 187
),
11 => array(
"fullname" => ' Shoping55555555555555555',
"grade" => 0.5000,
"timetaken" => 290
),
);
请参阅示例#2中的文档。您需要使用usort,这是一个通过用户定义的函数对数组进行排序的函数。比如:
function cmp($a, $b)
{
if ($a["grade"] == $b["grade"]) {
return 0;
}
return ($a["grade"] < $b["grade"]) ? -1 : 1;
}
usort($yourArray,"cmp")
函数cmp($a,$b)
{
如果($a[“等级”]==b[“等级”]){
返回0;
}
回报($a[“等级”]<$b[“等级”])?-1:1;
}
usort($yourArray,“cmp”)
试试这个
array_multisort(array_column($testing_data, 'grade'), SORT_DESC, SORT_NUMERIC, $testing_data);
我看不出这两个阵列之间有什么区别。不清楚你想做什么。从数据中可以看出,您希望先按等级降序排序,然后按时间升序排序。是吗?你试过许多函数中的任何一个吗?重复帖子上的答案显示了一种按多个标准对数组排序的简单方法。usort比较表达式应该是
$b['grade']$a['grade']?:$a['timetake']$b['timetake']
array_multisort(array_column($testing_data, 'grade'), SORT_DESC, SORT_NUMERIC, $testing_data);