que tiene una matriz función de clasificación de la siguiente manera:Posible pasar un cierre a la orden en PHP?
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;
}
Es evidente que esto no es lo ideal, ya que es difícil codificar la clave para buscar. Pensé que haría esto genérico pasando la clave como un param a la función externa, sin embargo, esto está fuera de alcance en la función interna. Traté de evitar esto mediante el uso de un cierre, lo que tendría acceso al parámetro, en lugar de una función interna de la siguiente manera:
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;
}
Sin embargo usort() sólo acepta un nombre de función, por lo que esto no funciona . ¿Alguien puede ver una (¿mejor?) Forma de lograr esto?
'usort' acepta un parámetro' callback', que puede ser un cierre. El error obvio en su código es la falta ';' después de la definición de la función. Tal vez esa es la causa del error. – lonesomeday
Además de una falta ';', '$ key' tampoco está en el alcance de su cierre. Deberías usarlo: '$ ascending = function ($ acciontA, $ accountB) use ($ key) {..'. – alexn