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);
你能发布预期结果吗?