2017-01-24 4 views
0

を持つ2つのキーでソート私は次の配列があります。PHPのusort:単一機能

Array 
(
[0] => Array 
    (
     [name] => 'Paul' 
     [value_1] => 3 
     [value_2] => 2 
    ) 

[1] => Array 
    (
     [name] => 'John' 
     [value_1] => 6 
     [value_2] => 5 
    ) 
[2] => Array 
    (
     [name] => 'Steve' 
     [value_1] => 1 
     [value_2] => 9 
    ) 
[3] => Array 
    (
     [name] => 'Joe' 
     [value_1] => 8 
     [value_2] => 1 
    )  
) 

を、私は状況に応じてキーvalue_1またはvalue_2で配列をソートする必要があります。

私はこれを行う:

<?php 

$i = 1;  
usort($my_array, 'sortByOrder_'.$i); 

$i = 2;  
usort($my_array, 'sortByOrder_'.$i); 

function sortByOrder_1($a, $b) {   
    if ($a['value_1'] < $b['value_1']) 
     return 1;   
} 

function sortByOrder_2($a, $b) {  
    if ($a['value_2'] < $b['value_2']) 
     return 1;   
} 

?> 

単一の機能に統一することが可能になります?。このような何か:

function sortByOrder_1($a, $b, $i) { 

    if ($a['value_'.$i] < $b['value_'.$i]) 
     return 1;  

} 
+0

あなたが期待される結果を投稿することができますか? – RomanPerekhrest

答えて

1

あなたは、工場のようなものを使用することができ、例えば:

<?php 
$input = [ 
    [ 
     'name' => 'Paul', 
     'value_1' => 3, 
     'value_2' => 2, 
    ], [ 
     'name' => 'John', 
     'value_1' => 6, 
     'value_2' => 5, 
    ], [ 
     'name' => 'Steve', 
     'value_1' => 1, 
     'value_2' => 9, 
    ], [ 
     'name' => 'Joe', 
     'value_1' => 8, 
     'value_2' => 1, 
    ] 
]; 

$cmp = function ($key) { 
    return function ($a, $b) use($key) { 
     if ($a[$key] < $b[$key]) { 
      return 1; 
     } 
    }; 
}; 

usort($input, $cmp('value_1')); 
print_r($input); 

usort($input, $cmp('value_2')); 
print_r($input); 
関連する問題