我有一个函数可以在多维数组中对数据进行排序,如下所示:
<?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);
?>
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它按预期工作,返回按名称排序的数据,升序.但是,我需要在课堂上使用它.
<?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"]);
}
}
?>
Run Code Online (Sandbox Code Playgroud)
当我使用它时,我收到以下警告:警告:usort()期望参数2是有效的回调,找不到函数'order_new'或函数名无效.
当我把order_new函数放在changeOrder函数中它工作正常,但我有致命错误的问题:无法重新声明order_new(),所以我不能使用它.有什么建议?
wor*_*nga 103
order_new是一个类方法而不是全局函数.正如PHP-Manual建议你可以在这种情况下使用
usort($data, array($this, "order_new"));
Run Code Online (Sandbox Code Playgroud)
或声明order_new静态并使用
usort($data, array("myClass", "order_new"));
Run Code Online (Sandbox Code Playgroud)
usort($data, array($this,"order_new"));
Run Code Online (Sandbox Code Playgroud)
是你在引用类实例中的函数时想要的.见可赎回
实例化对象的方法作为包含索引0处的对象和索引1处的方法名称的数组传递.
需要考虑的一件事是,如果变量通过引用传递给您的方法,则 usort() 似乎是在引用变量的上下文中执行,而不是在您当前的方法中执行。因此,您需要在类引用中提供完整的命名空间,如下所示:
usort($data, ['My\NameSpace\MyClass', 'order_new']);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33523 次 |
| 最近记录: |