【问题标题】:weirdest function with PHPPHP 中最奇怪的函数
【发布时间】:2012-04-16 09:07:31
【问题描述】:

好的,我正在尝试一些应该非常简单的东西。

这里是:

usort($newarr, "cmp");

function cmp($a, $b)
{ return 0; }

问题很简单:它不会通过给出这个警告信息对数组进行排序

Warning: usort() expects parameter 2 to be a valid callback, function 'cmp' not found or invalid function name

我已在此处阅读此答案PHP usort won't sort

但这对我来说没有任何意义,我没有像答案 1 中解释的那样的课程(我什至不需要任何课程,我尝试使用 $this,this,insted “myclass”,但它根本不起作用):

usort($items, array("MyClass", "compare_method"));

【问题讨论】:

  • 我不记得这是否是问题所在,但请尝试在 usort 上方而不是下方包含函数。
  • usort() 的调用是否与cmp 在同一范围内?如果是,cmp 是否在类中定义?
  • 尝试在代码中调用 usort() 之前放置排序函数定义。
  • @enrico:您的代码应该可以正常工作。您使用的是哪个 PHP 版本,您发布的内容正是您拥有的代码?

标签: php arrays usort


【解决方案1】:

更改脚本流程,当您尝试对数组进行排序时,cmp 尚不存在。所以,这应该工作:

function cmp($a, $b)
{ return 0; }

usort($newarr, "cmp");

【讨论】:

  • 其实反过来也行,为什么要改呢?
  • 真的吗?怎么会这样? PHP有一个水晶球来判断后面定义的函数是否存在? :)
  • 我不敢相信,我改变了订单,它不再给我一个错误O_o
  • @J0HN - 不需要水晶球。 PHP 解析文件然后 执行它。它不是逐行解析和执行的。
  • @PaulDixon,也许我是从平行宇宙中写的,或者我没有得到什么,或者我弄错了,但是 PHP 总是抱怨未定义的函数。您能否在某些文档页面上指出我错了?
【解决方案2】:

根据您发布的问题信息,无法具体说明为什么它不适合您。

代码通常可以工作,完全没问题(Demo):

<?php
$newarr = array();

if (!function_exists('cmp')) echo "cmp() not defined yet.\n";
usort($newarr, "cmp");

function cmp($a, $b)
{ return 0; }

我建议您在问题中添加更多信息,以便更好地说明实际问题所在。

  • 您使用的是哪个 PHP 版本?
  • 您是否使用命名空间?

【讨论】:

    【解决方案3】:

    使用anonymous functions(或create_function)创建像cmp 这样的匿名函数,然后将其传递给usort

    例子:

    usort($newarr, function($a, $b) {
        return 0;
    });
    

    【讨论】:

    • 使用anonymous functions 比使用create_function 更好。
    • @hakre 这取决于 PHP 版本。如果在共享主机上,它可能没有 PHP 5.3,但这也是一个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多