Почему эта функция usort() не работает в некоторых версиях PHP?
Вопрос
Мы написали код с использованием usort, который отлично работает в наших системах разработки (PHP 5.2.8), но в наших реальных системах (PHP 5.2.0) возникла проблема:
// Sort by distance
usort($locations, 'Interpolator::sortByDistance');
вызывает метод (внутри того же класса 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;
}
В наших живых системах это возвращает совершенно произвольно отсортированный массив, исходный порядок нарушен, но по расстоянию все еще не отсортирован.
Я не могу найти никакой ссылки на ошибку PHP, исправленную между 5.2.0 и 5.2.8, имеющую отношение к этой проблеме.
Откуда может возникнуть эта проблема?Могу ли я исправить это, не написав функцию сортировки самостоятельно?
Решение
Единственное, о чем я могу думать, это то, что вы должны использовать это:
usort($locations, array('Interpolator', 'sortByDistance'));
Не связан с StackOverflow