PHP:如何使用带有匿名函数的 usort?

标签 php arrays

我有一个数组数组。

我正在尝试使用此代码根据主数组的每个元素的字段对主数组进行排序。

$field = $this->sorting;
usort($this->out_table["rows"], function($a, $b) use ($field) {
        return strnatcmp($a[$field], $b[$field]);
});

但我得到了这个
 Parse error: syntax error, unexpected T_FUNCTION 

引用第二行,以'usort'开头的那一行

我错过了什么?

我的 php 版本是
PHP 5.2.4-2ubuntu5.27 with Suhosin-Patch 0.9.6.2 (cli) (built: Mar 11 2013 14:14:48)

最佳答案

PHP 5.2 不支持匿名函数。匿名函数是 Closure 的实例类,其中 as the docs say , 直到 5.3 才推出... PS: _upgrade 你的 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'));

这基本上是什么 Closure例如,在这种情况下,匿名函数业务是语法糖。像这样的类的优点是你可以向它添加更多的排序回调,并保持它作为一种实用程序类使用 sortAscendingsortDescending回调方法,例如。除了您可以在实例上设置的选项外,排序器在需要时使用严格(类型和值)比较......

关于PHP:如何使用带有匿名函数的 usort?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28721433/

相关文章:

php - 提取文本并保留 php 中的格式

c - 打印 ABC - 字符串

Python:如何快速堆叠数据框中某一列的所有数组?

c - 对数组的索引进行排序

sql - Spark 内联与。横向 View explode 差异?

php - 使用 Laravel 5.4 和推送器向公共(public) channel 广播通知

php - 为什么用于排序的foreach循环一结束,多维子数组的排序顺序就会恢复?

php - PDO mySql 查询在调用时第二次没有在 for 循环中执行

php - CodeIgniter:无法在 View 中的函数内访问 $this

c++ - 运行时检查失败 #2 - 变量 "primes"周围的堆栈已损坏