【问题标题】:Why does this usort()-function fail on some versions of PHP?为什么这个 usort() 函数在某些版本的 PHP 上会失败?
【发布时间】:2009-02-18 16:05:48
【问题描述】:

我们编写了一些涉及 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;
}        

在我们的实时系统上,这会返回一个完全任意排序的数组,原来的顺序被打乱了,但仍然没有按距离排序。

我找不到与此问题相关的在 5.2.0 和 5.2.8 之间修复的 PHP 错误的任何参考。

这个问题可能来自哪里?我可以自己编写排序函数来解决这个问题吗?

【问题讨论】:

  • 字符串 'Interpolator::sortByDistance' 是否在所有 PHP 版本中都用作回调?我一直使用约定数组('Iterpolator'、'sortByDistance')来进行静态方法回调。
  • @chaos - 谢谢...不知道。

标签: php arrays usort


【解决方案1】:

我能想到的唯一想法是你应该使用这个:

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

【讨论】:

  • 谢谢,但就像混乱评论我的问题一样,这是 5.2.3 的功能。
  • 不错。猜猜他们在通往 5.8.0 的路上某处破坏了支持。
  • 糟糕,没有看到问题 cmets。 5.8.0 不存在 - 我猜你的意思是服务器上的 5.2.0,所以在添加 'Interpolator::sortByDistance' 样式之前。
  • @chaos:我只是假设 5.8.0 是一个错字,他的意思是 5.2.0。 5.2.8是PHP的最新版本。
  • 似乎与 bugs.php.net/bug.php?id=29049 有关,但声称已在 5 年前修复!
猜你喜欢
  • 1970-01-01
  • 2021-02-22
  • 2016-10-22
  • 2019-03-12
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多