PHP排序函数,用于排序对象数组
发布时间:2020-12-13 18:11:15 所属栏目:PHP教程 来源:网络整理
导读:我有一个充满来自同一个类的对象的数组.我想通过可选对象字段对此数组进行排序,例如$case- ID或$case- Sender 是否有一个内置的array_sort()函数的味道,或者我必须自己写这个排序函数? 答案不必详细解释 – 这更像是/否问题 谢谢 我尝试失败的尝试失败了:
我有一个充满来自同一个类的对象的数组.我想通过可选对象字段对此数组进行排序,例如$case-> ID或$case-> Sender
是否有一个内置的array_sort()函数的味道,或者我必须自己写这个排序函数? 答案不必详细解释 – 这更像是/否问题 谢谢 我尝试失败的尝试失败了: function sortBy($sort) { usort($this->abuseCases,function($a,$b) { if($a->{$sort} > $b->{$sort}) return 1; if($a->{$sort} < $b->{$sort}) return -1; else return 0; }); } 另一次尝试失败: function sortBy($sort) { $this->sortBy = $sort; usort($this->abuseCases,array("this","srt")); } private function srt($a,$b) { if($a->{$this->sortBy} > $b->{$this->sortBy}) return 1; if($a->{$this->sortBy} < $b->{$this->sortBy}) return -1; else return 0; } 编辑凹凸
您不仅可以使用匿名函数,还可以使用闭包,例如
function ($a,$b) use ($sort) { ... } 和$sort将在函数体中可用. <?php function getFn($sort) { return function($a,$b) use($sort) { if($a->$sort > $b->$sort) return 1; if($a->$sort < $b->$sort) return -1; return 0; }; } $abuseCases = array( (object)array('ID'=>1,'Sender'=>'Sender A'),(object)array('ID'=>3,'Sender'=>'Sender D'),(object)array('ID'=>2,'Sender'=>'Sender C'),(object)array('ID'=>4,'Sender'=>'Sender B') ); echo "n----- Sort By Sender ----n"; usort($abuseCases,getFn('Sender')); foo($abuseCases); echo "n----- Sort By ID ----n"; usort($abuseCases,getFn('ID')); foo($abuseCases); function foo($a) { foreach($a as $o) { echo $o->ID,' ',$o->Sender,"n"; } } 版画 ----- Sort By Sender ---- 1 Sender A 4 Sender B 2 Sender C 3 Sender D ----- Sort By ID ---- 1 Sender A 2 Sender C 3 Sender D 4 Sender B 更新:使用php< 5.3,您可以使用对象而不是匿名函数. $abuseCases = getData(); echo "n----- Sort By Sender ----n"; usort($abuseCases,array(new Foo('Sender'),'compare')); foo($abuseCases); echo "n----- Sort By ID ----n"; usort($abuseCases,array(new Foo('ID'),'compare')); foo($abuseCases); class Foo { public $propName; // protected? public function __construct($propertyName) { $this->propName = $propertyName; } public function compare($a,$b) { $prop = $this->propName; if($a->$prop > $b->$prop) return 1; if($a->$prop < $b->$prop) return -1; return 0; } } function foo($a) { foreach($a as $o) { echo $o->ID,"n"; } } function getData() { return array( (object)array('ID'=>1,'Sender'=>'Sender B') ); } (如果你大量使用它 – 或者不想写这样的借口 – 你可能想要定义类似接口Comparator {…}的接口,让Foo实现该接口并具有一些功能/使用Comparator的类,即usort()周围对象的包装器.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |