2016-10-27 10 views
0

2値に従ってソートしたい配列があります。 まず、c_gpaの値に従ってソートしたいと思います。 c_gpaの値が配列の他の値と等しい場合は、t_markの値をソートします。ここで2値に従って配列を並べ替える方法

は私の配列

$array = array(
     [0]=>array(
      "roll_number" => 1, 
      "c_gpa" => 4.8, 
      "t_mark"=>750 
     ), 
     [1] => array(
      "roll_number" => 2, 
      "c_gpa" => 4.12, 
      "t_mark"=>530 
     ), 
     [2] => array(
      "roll_number" => 3, 
      "c_gpa" => 4.12, 
      "t_mark"=>550 
     ) 

)です。

私は、ソートc_gpa値のコードの下に書きましたが、そこに2値が同じである(4.12)ので、私はこれらの配列

usort($array, "all_filter"); 
    function all_filter($a,$b) { 
     return $a['c_gpa'] < $b['c_gpa']; 

    } 

私の予想出力は「t_mark」の値をソートしたいです。

$array = array(
     [0]=>array(
      "roll_number" => 1, 
      "c_gpa" => 4.8, 
      "t_mark"=>750 
     ), 
     [1] => array(
      "roll_number" => 3, 
      "c_gpa" => 4.12, 
      "t_mark"=>550 
     ),   
     [2] => array(
      "roll_number" => 2, 
      "c_gpa" => 4.12, 
      "t_mark"=>530 
     ) 

);

ありがとうございます!!!

+2

が配列を__sort__、___filtering___配列が –

+0

全く違うものであり、その答えは '$ a ['c_gpa'] == $ b ['c_gpa']'をテストするためにall_filter()を修正し、もしそうなら '$ a ['t_mark'] <$ b [ 't_mark'] ' –

+0

ありがとう、それをチェックさせてください。 – cloud

答えて

3

これは、array_multisort関数を使用して行うことができます。あなたがusort()を使用したい場合は

<?php 
// Obtain a list of columns 
foreach ($array as $key => $row) { 
    $c_gpa[$key] = $row['c_gpa']; 
    $t_mark[$key] = $row['t_mark']; 
} 

// Sort the data array with $c_gpa ASC, $t_mark ASC 
// Add $data as the last parameter, to sort by the common key 
array_multisort($c_gpa, SORT_DESC, $t_mark, SORT_ASC, $array); 
var_dump($array); 
?> 

array_multisort documentation

+0

ご協力いただきありがとうございます。これをチェックさせてください。 – cloud

1

は、あなたがこのようにそれを使用することができますし、あなたが意味demo

<?php 
    $array = array(
      array(
       "roll_number" => 1, 
       "c_gpa" => 4.8, 
       "t_mark"=>750 
      ), 
      array(
       "roll_number" => 2, 
       "c_gpa" => 4.12, 
       "t_mark"=>530 
      ), 
      array(
       "roll_number" => 3, 
       "c_gpa" => 4.12, 
       "t_mark"=>550 
      )); 
    usort($array, function($a, $b){ 
     return $a['c_gpa'] > $b['c_gpa'] ? true : $a['c_gpa'] < $b['c_gpa'] ? false : $a['t_mark'] < $b['t_mark'] ? true : false; 
    }); 
    var_dump($array); 
関連する問題