使用usort和全局变量对数组进行排序

时间:2014-05-01 16:28:44

标签: php arrays sorting

我使用usort对多维数组进行排序。它工作正常,直到用于排序连接全局变量的键。

var_dump($lang);//OK, outputs 'eng'

function cmp(array $a, array $b) {
    if ($a['name'] < $b['name']) {
        return -1;
    } else if ($a['name'] > $b['name']) {
        return 1;
    } else {
        return 0;
    }
}

function cmp2(array $a, array $b) {
    global $lang;
    var_dump($lang);//null?

    if ($a['name_'.$lang] < $b['name_'.$lang]) {//line: 93
        return -1;
    } else if ($a['name_'.$lang] > $b['name_'.$lang]) {
        return 1;
    } else {
        return 0;
    }
}

usort($platform['Server'], "cmp");//OK
usort($platform['Asset'], "cmp2");//Notice (8): Undefined index: name_ [APP\View\Platforms\view.ctp, line 93]

如何在传递给usort的函数内连接lang变量?

我在PHP 5.3上。

此外,是否有办法将这两个函数统一为一个,同时传递密钥作为参数进行排序?

1 个答案:

答案 0 :(得分:7)

如果您使用的是PHP 5.3+,那么您可以利用匿名函数:

usort($platform['Asset'], function(array $a, array $b) use($lang){
    if ($a['name_'.$lang] < $b['name_'.$lang]) {
        return -1;
    } else if ($a['name_'.$lang] > $b['name_'.$lang]) {
        return 1;
    } else {
        return 0;
    }
});