2012-01-25 55 views
1

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

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

usort($arrayToSort, $functSort); 

在比较功能的$intCompareField为空,我的猜测是因为$intCompareField被宣布为功能之外。设置global $intCompareField似乎不起作用。

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

+0

您确定只想返回'1'或'-1',通常希望将“0”返回为“相等”的值。 – salathe

+0

我知道,但我想保持短暂的功能。非常感谢评论 – keepwalking

+0

所以,你更喜欢*短而破* *短 - 尽管不像以前那么短 - 和工作*?祝你好运! – salathe

回答

3

尝试增加use,使得从外部范围变量匿名函数

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

谢谢,它似乎工作。 – keepwalking

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()或一些其他适当的名称),也没有要求为它是一个匿名函数。

+0

感谢您的提示:) – keepwalking

相关问题