如何通过移动到别处停止重新声明php功能问题

时间:2011-12-06 17:44:36

标签: php foreach redeclare

我基本上有一个PHP函数,它在一个巨大的foreach语句中,需要在那个foreach 中,因为它使用循环中的值。

foreach ($x as $y) {

...

            function sortq($a, $b){
                if ((int)$a->id == (int)$b->id) {
                    return 0;
                }
                return ((int)$a->id < (int)$b->id) ? -1 : 1;
            }

            usort($sort, 'sortq');

...

}

如何将此功能剥离到通用类或方法中,以便我可以多次调用它?我尝试了'class'路线,但后来在foreach循环中重新声明了类:D

请帮忙!非常感谢

1 个答案:

答案 0 :(得分:1)

function_exists检查中包装函数定义将起作用:

if (!function_exists('sortq')) {
    function sortq($a, $b) { ... }
}

如果您可以依赖至少PHP 5.3+,则应使用closure

usort($sort, function($a, $b) {
    if ((int)$a->id == (int)$b->id) {
        return 0;
    }
    return ((int)$a->id < (int)$b->id) ? -1 : 1;
});

编辑:实际上,usort所要求的比较函数的定义是:

  

如果第一个参数被认为分别小于,等于或大于第二个参数,则比较函数必须返回小于,等于或大于零的整数。

因此,您可以将该功能简化为:

function ($a, $b) { return (int)$a->id - (int)$b->id; }