2012-01-24 14 views
0

まあ、私はPHPでいくつかのデータをソートしようとしています。ここでアレイ(Iまだ各行のそれぞれの値に関連付けるIDを表す最初の列)の例である:PHPで多次元配列を複数のキーで並べ替える

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

まず、私は第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

そして、まだ第二の列を有するものを保ちます第2の列の同じ値を有する行の各セットによって、第3の値を昇順に並べる:

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のための機能をソートしていくつかのことを試みました行の関連付けを維持しながら、両方の操作を行う方法を理解していない。

答えて

2

1つの方法は、関数を使用してカスタムソートルーチンを作成することです。データのソート方法、多次元性、キーのソートなどに応じて、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); 
+0

ありがとう、本当に必要なものでした! PHPで配列の並べ替えについて学んでいるので、私はそれを理解することができませんでした。 – user1165983

関連する問題