在一个类私有函数使用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'));
- 打开手册页面http://www.php.net/usort
- 请参阅
$value_compare_func
的types是callable
- 点击链接的关键字来访问http://php.net/manual/en/language.types.callable.php
- 看到这个语法是
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; });