PHP usort:使用单个函数按两个键进行排序

PHP usort:使用单个函数按两个键进行排序,php,usort,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

我有下一个数组:

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\u 1
value\u 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;      

}
函数排序规则1($a,$b,$i){
如果($a['value.'$i]<$b['value.'$i])
返回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);

你能发布预期结果吗?