好的,在函数中使用usort不是很复杂
这是我以前在我的线性代码中所做的
function merchantSort($a,$b){
return ....// stuff;
}
$array = array('..','..','..');
为了排序,我简单地这样做
usort($array,"merchantSort");
现在我们正在升级代码,删除所有全局函数,并将它们放在适当的位置。现在所有的代码都在一个类中,我不知道如何使用usort函数对带有参数的数组进行排序,该参数是一个对象方法,而不是一个简单的函数
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()函数中调用对象方法
发布于 2011-05-19 13:08:34
让你的排序函数成为静态的:
private static function merchantSort($a,$b) {
return ...// the sort
}
并使用数组作为第二个参数:
$array = $this->someThingThatReturnAnArray();
usort($array, array('ClassName','merchantSort'));
发布于 2014-03-28 06:12:10
你需要传递$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 ) );
发布于 2012-06-29 17:59:54
在本例中,我按照数组中一个名为AverageVote的字段进行排序。
您可以在调用中包含该方法,这意味着您不再有类作用域问题,如下所示…
usort($firstArray, function ($a, $b) {
if ($a['AverageVote'] == $b['AverageVote']) {
return 0;
}
return ($a['AverageVote'] < $b['AverageVote']) ? -1 : 1;
});
https://stackoverflow.com/questions/6053994
复制相似问题