2009-02-18 16 views
0

Nous avons écrit un code impliquant usort qui fonctionne très bien sur nos systèmes de développement (PHP 5.2.8), mais connaissent un problème sur nos systèmes en direct (PHP 5.2.0):Pourquoi cette fonction usort() échoue-t-elle sur certaines versions de PHP?

// Sort by distance 
usort($locations, 'Interpolator::sortByDistance'); 

appelle la méthode (au sein la même classe interpolateur):

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; 
}   

Sur nos systèmes en direct, retourne un tableau trié complètement arbitraire, l'ordre d'origine est perturbée, mais pas encore classifiées selon la distance.

Je ne trouve aucune référence à un bogue PHP corrigé entre 5.2.0 et 5.2.8 concernant ce problème.

D'où ce problème pourrait-il provenir? Puis-je corriger ce manque d'écriture d'une fonction de tri moi-même?

+0

Est-ce que la chaîne « interpolateur :: sortByDistance » travail comme un rappel dans toutes les versions de PHP? J'ai toujours utilisé le tableau de convention ('Iterpolator', 'sortByDistance') pour les rappels de méthodes statiques. – nickohrn

+0

C'est une fonctionnalité PHP 5.2.3+. – chaos

+0

@chaos - Merci ... je ne le savais pas. – nickohrn

Répondre

3

La seule chose que je peux penser est que vous devriez utiliser ceci:

usort($locations, array('Interpolator', 'sortByDistance')); 
+0

Merci, mais comme le chaos a commenté ma question, c'est une fonctionnalité 5.2.3. –

+0

Umm, attends, ça a vraiment marché ... –

+0

Nice. Devinez ils ont cassé le support quelque part le long de la route à 5.8.0. – chaos