Reputation: 2126
I have the next 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
)
)
I need to sort the array by key value_1
or value_2
depending on the situation.
I do this:
<?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;
}
?>
It is possible to unify in a single function?. Something like this:
function sortByOrder_1($a, $b, $i) {
if ($a['value_'.$i] < $b['value_'.$i])
return 1;
}
Upvotes: 0
Views: 386
Reputation: 54659
You can use something like a factory, e.g.:
<?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);
Upvotes: 1