我有一个数组的数组。
我正在尝试使用此代码根据主数组的每个元素的字段对主数组进行排序。
$field = $this->sorting;
usort($this->out_table["rows"], function($a, $b) use ($field) {
return strnatcmp($a[$field], $b[$field]);
});
Run Code Online (Sandbox Code Playgroud)
但我得到了这个
Parse error: syntax error, unexpected T_FUNCTION
Run Code Online (Sandbox Code Playgroud)
参考第二行,以“usort”开头的行
我缺少什么?
我的php版本是
PHP 5.2.4-2ubuntu5.27 with Suhosin-Patch 0.9.6.2 (cli) (built: Mar 11 2013 14:14:48)
Run Code Online (Sandbox Code Playgroud)
PHP 5.2 不支持匿名函数。匿名函数是Closure类的实例,正如文档所说,直到 5.3 才引入...... PS:_升级你的 PHP 版本,5.2 很久以前就已经停产了。
不过,目前您最好编写自己的类,将$field值传递给该类的实例并使用数组样式的可调用参数:
class Sorter
{
protected $field = null;
public function __construct($field)
{
$this->field = $field;
}
public function sortCallback($a, $b)
{
return strnatcmp($a[$this->field], $b[$this->field]);
}
}
$sorter = new Sorter($field);
usort($this->out_table["rows"], array($sorter, 'sortCallback'));
Run Code Online (Sandbox Code Playgroud)
这基本上就是Closure实例的作用,在这种情况下,匿名函数业务就是语法糖。像这样的类的优点是,您可以向其中添加更多排序回调,并使其作为一种带有 asortAscending和sortDescending回调方法的实用程序类方便使用。除了可以在实例上设置的选项之外,使排序器在需要时使用严格(类型和值)比较......