使用usort和动态生成的函数对数组进行排序

时间:2012-01-25 09:00:41

标签: php sorting usort

我正在使用php函数usort对数组进行排序。必须生成自定义php函数,因为它的动态

$intCompareField = 2;
$functSort = function($a, $b) {
  return ($a[$intCompareField] > $a[$intCompareField])?1:-1;
}

usort($arrayToSort, $functSort);

compare函数中的$intCompareField为null,我的猜测是因为$intCompareField是在函数外声明的。设置global $intCompareField似乎不起作用。

Ps:我正在使用$intCompareField,因为要排序的数组是多维的,我希望能够对数组中的哪个键进行排序。

2 个答案:

答案 0 :(得分:3)

尝试添加use,它将变量从外部作用域传递给匿名函数

function($a, $b) use ($intCompareField) {
     return ($a[$intCompareField] > $a[$intCompareField])?1:-1;
}

答案 1 :(得分:3)

虽然Dor Shemer's answer就足够了,但我发现拥有一个生成所需比较函数的函数通常会更好。

$functSort = function ($field) {
    return function($a, $b) use ($field) {
        // Do your comparison here
    };
};

$intCompareField = 2;
usort($arrayToSort, $functSort($intCompareField));

您可以使$functSort中的函数成为命名函数(例如sort_by_field_factory()或其他适当的名称),并不要求它是匿名函数。