我正在使用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
,因为要排序的数组是多维的,我希望能够对数组中的哪个键进行排序。
答案 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()
或其他适当的名称),并不要求它是匿名函数。