Perché questo usort () - Funzione di fallire su alcune versioni di PHP?
Domanda
Abbiamo scritto un codice che coinvolge usort che funziona bene sui nostri sistemi di sviluppo (PHP 5.2.8), ma stiamo vivendo un problema sui nostri sistemi live (PHP 5.2.0):
// Sort by distance
usort($locations, 'Interpolator::sortByDistance');
chiama il metodo (all'interno della stessa classe Interpolator):
private static function sortByDistance($a, $b) {
$return = 0;
if($a['distance'] > $b['distance']) {
$return = 1;
} else if ($a['distance'] < $b['distance']) {
$return = -1;
}
return $return;
}
Sui nostri sistemi live, questo restituisce una matrice completamente arbitrariamente ordinato, l'ordine originale è disturbato, ma ancora non in ordine di distanza.
Non riesco a trovare alcun riferimento a un bug di PHP fisso tra 5.2.0 e 5.2.8 relative a questa problema.
Dove potrebbe il problema essere provenienti da? Posso risolvere questo breve di scrivere un ordinamento me stesso funzionare?
Soluzione
L'unica cosa che mi viene in mente è che si dovrebbe utilizzare questo:
usort($locations, array('Interpolator', 'sortByDistance'));