I have an array sorting function as follows:
public function sortAscending($accounts)
{
function ascending($accountA, $accountB) {
if ($accountA['AmountUntilNextTarget'] == $accountB['AmountUntilNextTarget']) {
return 0;
}
return ($accountA['AmountUntilNextTarget'] < $accountB['AmountUntilNextTarget']) ? -1 : 1;
}
usort($accounts, $ascending);
return $accounts;
}
Clearly this is not ideal as it is hard-coding the key to search for. I thought I would make this generic by passing the key as a param to outside function, however this is then out-of-scope in the inner function. I tried to get around this by using a closure, which would have access to the param, instead of an inner function as follows:
public function sortAscending($accounts, $key)
{
$ascending = function($accountA, $accountB) {
if ($accountsA[$key] == $accountB[$key]) {
return 0;
}
return ($accountA[$key] < $accountB[$key]) ? -1 : 1;
}
usort($accounts, $ascending);
return $accounts;
}
However usort() only accepts a function name, so this doesn’t work. Can anyone see a (better?) way of achieving this?
usekeyword to let the function “see” a certain variable (or variables). See also the PHP documentation about Anonymous functions.;after the closing}of the closure.After making these changes your code would look like this (and should work fine):