在PHP中使用多个键对多维数组进行排序

时间:2012-01-24 02:37:23

标签: php arrays sorting multidimensional-array associations

我正在尝试用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的数组排序函数,但我仍然无法弄清楚如何在保持行关联的同时进行这两项操作。

1 个答案:

答案 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);