2012-01-25 95 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

相關問題