在一个类私有函数使用PHP中的usort

确定使用function并不复杂

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

function merchantSort($a,$b){ return ....// stuff; } $array = array('..','..','..'); 

把我简单地做

 usort($array,"merchantSort"); 

现在,我们正在升级代码,并删除所有的全局函数,并把它们放在适当的位置。 现在所有的代码是在一个类,我不知道如何使用usort函数来sorting数组与对象的方法,而不是一个简单的函数

 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()函数内的对象方法

使你的sortingfunction是静态的:

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

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

 $array = $this->someThingThatReturnAnArray(); usort($array, array('ClassName','merchantSort')); 
  1. 打开手册页面http://www.php.net/usort
  2. 请参阅$value_compare_func的types是callable
  3. 点击链接的关键字来访问http://php.net/manual/en/language.types.callable.php
  4. 看到这个语法是array($this, 'merchantSort')

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

完整的例子:

 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 ) ); 

在这个例子中,我按照名为AverageVote的数组中的字段进行sorting。

你可以在调用中包含方法,这意味着你不再有类范围的问题,像这样…

  usort($firstArray, function ($a, $b) { if ($a['AverageVote'] == $b['AverageVote']) { return 0; } return ($a['AverageVote'] < $b['AverageVote']) ? -1 : 1; });