PHP嵌套函数使用内部函数的外部变量

时间:2014-02-04 21:17:50

标签: php function closures scope nested-function

我想使用uasort按给定键对二维关联数组进行排序。

我试过了

function sortBy(&$arr, $key) {
    $cmp = function($a, $b) {
        global $key;
        return $a[$key] < $b[$key] ? -1 :
               $a[$key] == $b[$key] ? 0 : 1;
    };
    return uasort($arr, $cmp);
}

$key$cmp未定义。

2 个答案:

答案 0 :(得分:4)

尝试使用此

function sortBy(&$arr, $key) {
    $cmp = function($a, $b) use ($key) {
        return $a[$key] < $b[$key] ? -1 :
           $a[$key] == $b[$key] ? 0 : 1;
    };
    return uasort($arr, $cmp);
}

答案 1 :(得分:2)

这应解决问题

function sortBy(&$arr, $key) {
    $cmp = function($a, $b) use($key) {
        global $key;
        return $a[$key] < $b[$key] ? -1 :
               $a[$key] == $b[$key] ? 0 : 1;
    };
    return uasort($arr, $cmp);
}

请注意,我在嵌套函数的声明中添加了use($key)。您可以在http://www.php.net/manual/en/functions.anonymous.php

找到更多信息