首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在php中通过类私有函数使用usort

在php中通过类私有函数使用usort
EN

Stack Overflow用户
提问于 2011-05-19 13:03:35
回答 4查看 82.4K关注 0票数 129

好的,在函数中使用usort不是很复杂

这是我以前在我的线性代码中所做的

代码语言:javascript
复制
function merchantSort($a,$b){
    return ....// stuff;
}

$array = array('..','..','..');

为了排序,我简单地这样做

代码语言:javascript
复制
usort($array,"merchantSort");

现在我们正在升级代码,删除所有全局函数,并将它们放在适当的位置。现在所有的代码都在一个类中,我不知道如何使用usort函数对带有参数的数组进行排序,该参数是一个对象方法,而不是一个简单的函数

代码语言:javascript
复制
class ClassName {
   ...

   private function merchantSort($a,$b) {
       return ...// the sort
   }

   public function doSomeWork() {
   ...
       $array = $this->someThingThatReturnAnArray();
       usort($array,'$this->merchantSort'); // ??? this is the part i can't figure out
   ...

   }
}

问题是如何在usort()函数中调用对象方法

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-19 13:08:34

让你的排序函数成为静态的:

代码语言:javascript
复制
private static function merchantSort($a,$b) {
       return ...// the sort
}

并使用数组作为第二个参数:

代码语言:javascript
复制
$array = $this->someThingThatReturnAnArray();
usort($array, array('ClassName','merchantSort'));
票数 247
EN

Stack Overflow用户

发布于 2014-03-28 06:12:10

你需要传递$this,例如:usort( $myArray, array( $this, 'mySort' ) );

完整示例:

代码语言:javascript
复制
class SimpleClass
{                       
    function getArray( $a ) {       
        usort( $a, array( $this, 'nameSort' ) ); // pass $this for scope
        return $a;
    }                 

    private function nameSort( $a, $b )
    {
        return strcmp( $a, $b );
    }              

}

$a = ['c','a','b']; 
$sc = new SimpleClass();
print_r( $sc->getArray( $a ) );
票数 28
EN

Stack Overflow用户

发布于 2012-06-29 17:59:54

在本例中,我按照数组中一个名为AverageVote的字段进行排序。

您可以在调用中包含该方法,这意味着您不再有类作用域问题,如下所示…

代码语言:javascript
复制
        usort($firstArray, function ($a, $b) {
           if ($a['AverageVote'] == $b['AverageVote']) {
               return 0;
           }

           return ($a['AverageVote'] < $b['AverageVote']) ? -1 : 1;
        });
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6053994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档