0

我基本上有一个 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');

...

}

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

请帮忙!非常感谢

4

1 回答 1

1

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

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

如果您可以依赖至少 PHP 5.3+,您应该使用闭包

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; }
于 2011-12-06T17:57:58.933 回答