类中的 usort 函数

php
2022-08-30 10:09:45

我有一个函数,可以在多维数组中对数据进行排序,如下所示:

<?php  
$data = array();  
$data[] = array("name" => "James");  
$data[] = array("name" => "andrew");  
$data[] = array("name" => "Fred");  

function cmp($a, $b)  
{  
    return strcasecmp($a["name"], $b["name"]);  
}  

usort($data, "cmp");  

var_dump($data);  
?>  

当我运行这个时,它按预期工作,返回按名称排序的数据,升序。但是,我需要在类中使用它。

<?php
class myClass  
{  
    function getData()  
    {  
        // gets all data
        $this -> changeOrder($data);
    }  

    function changeOrder(&$data)  
    {  
         usort($data, "order_new");
    }

    function order_new($a, $b)  
    {  
        return strcasecmp($a["name"], $b["name"]);  
    }
}
?>

当我使用它时,我得到以下警告:警告:usort()期望参数2是有效的回调,函数“order_new”未找到或无效的函数名称。

当我将order_new函数放在changeOrder函数中时,它工作正常,但我遇到了致命错误的问题:无法重新声明order_new(),所以我不能使用它。有什么建议吗?


答案 1

order_new是类方法,而不是全局函数。正如PHP手册所建议的那样,您可以在这种情况下使用

usort($data, array($this, "order_new")); 

或声明order_new静态和使用

usort($data, array("myClass", "order_new")); 

答案 2

更改为usort($data, array($this, "order_new"));


推荐