我使用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上。
此外,是否有办法将这两个函数统一为一个,同时传递密钥作为参数进行排序?
答案 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;
}
});