我正在尝试用PHP对一些数据进行排序。这是一个数组示例(第一列代表我想要仍然与每行中各自值相关联的ID):
0 1 2.0
1 15 20.0
2 15 5.5
3 15 55.1
4 2 22.3
5 20 70.8
6 2 8.2
首先,我想按顺序排列行,其中第二列中的值按降序排列:
5 20 70.8
1 15 20.0
2 15 5.5
3 15 55.1
4 2 22.3
6 2 8.2
0 1 2.0
然后,保持第二列中的那些仍在其排列中,通过第二列中具有相同值的每组行,按升序排列第三列:
5 20 70.8
2 15 5.5
1 15 20.0
3 15 55.1
6 2 8.2
4 2 22.3
0 1 2.0
我已经尝试过PHP的数组排序函数,但我仍然无法弄清楚如何在保持行关联的同时进行这两项操作。
答案 0 :(得分:2)
一种方法是使用usort函数创建自定义排序例程。根据您希望数据排序,多维度,键排序等方式,在PHP中对数组进行排序的方式有很多种。此代码段根据上述输入和输出要求进行排序。
$vals = array(
array('id' => 0, 'val1' => 1, 'val2' => 2.0),
array('id' => 1, 'val1' => 15, 'val2' => 20.0),
array('id' => 2, 'val1' => 15, 'val2' => 5.5),
array('id' => 3, 'val1' => 15, 'val2' => 55.1),
array('id' => 4, 'val1' => 2, 'val2' => 22.3),
array('id' => 5, 'val1' => 20, 'val2' => 70.8),
array('id' => 6, 'val1' => 2, 'val2' => 8.2)
);
usort($vals, 'sortfn');
function sortfn($a, $b)
{
if($a['val1'] == $b['val1'])
return ($a['val2'] > $b['val2']);
else
return ($a['val1'] < $b['val1']);
}
var_dump($vals);