usort(): 数组由用户比较函数修改

2022-08-30 11:01:33

我有一个Web应用程序,在我们的Linux服务器上运行良好,但是当使用PHP 5.3在Mac OS上使用Zend Community Edition Server运行时,我们得到错误:

usort(): 数组由用户比较函数修改

每次首次加载页面时(页面勾选和加载大约需要2分钟,在linux服务器上,页面加载时间为1秒)。

有没有其他人经历过这种情况,或者知道如何解决这个问题,我尝试过玩PHP和Apache内存设置,但没有运气。


答案 1

有一个PHP错误可能导致此警告,即使您不更改数组也是如此。

简短版本,如果任何PHP调试函数检查排序数组,它们将更改引用计数并欺骗您已更改数据。usort()

因此,通过在排序函数(或从中调用的任何代码)中执行以下任何操作,您将获得该警告:

  • 调用 或 on 任何排序数据var_dumpprint_r
  • debug_backtrace()
  • 引发异常 - 任何异常 - 甚至只是创建异常

该错误会影响所有 PHP 5 版本 >= 5.2.11,但不会影响 PHP >= 7。有关更多详细信息,请参阅错误报告

据我所知,唯一的解决方法是“不要这样做”(这对于异常来说有点困难),或者使用错误抑制运算符来忽略所有错误。@usort()


答案 2

要解决此问题,我们可以按如下方式处理

1) 使用error_reporting

$a = array('id' => 2,'val' => 3, 'ind' => 3);
$errorReporting = error_reporting(0);
usort($a);
error_reporting($errorReporting);

2)使用@usort($a);

$a = array('id' => 2,'val' => 3, 'ind' => 3);
@usort($a);

推荐