在PHP中对对象进行排序的一种优雅方法是什么?我很乐意完成类似的事情。
$sortedObjectArary = sort($unsortedObjectArray, $Object->weight);
基本上,指定我想要排序的数组以及我想要排序的字段。我研究了多维数组排序,可能会有一些有用的东西,但我没有看到任何优雅或明显的东西。
发布于 2008-09-23 22:20:55
几乎一字不差地照搬手册:
function compare_weights($a, $b) {
if($a->weight == $b->weight) {
return 0;
}
return ($a->weight < $b->weight) ? -1 : 1;
}
usort($unsortedObjectArray, 'compare_weights');
如果您希望对象能够自动排序,请参阅此处的示例3:http://php.net/usort
发布于 2009-08-24 00:07:27
对于php >= 5.3
function osort(&$array, $prop)
{
usort($array, function($a, $b) use ($prop) {
return $a->$prop > $b->$prop ? 1 : -1;
});
}
请注意,这使用匿名函数/闭包。你可能会发现查看php文档是很有用的。
发布于 2008-09-23 23:01:14
如果您想要这种级别的控制,您甚至可以将排序行为构建到您正在排序的类中
class thingy
{
public $prop1;
public $prop2;
static $sortKey;
public function __construct( $prop1, $prop2 )
{
$this->prop1 = $prop1;
$this->prop2 = $prop2;
}
public static function sorter( $a, $b )
{
return strcasecmp( $a->{self::$sortKey}, $b->{self::$sortKey} );
}
public static function sortByProp( &$collection, $prop )
{
self::$sortKey = $prop;
usort( $collection, array( __CLASS__, 'sorter' ) );
}
}
$thingies = array(
new thingy( 'red', 'blue' )
, new thingy( 'apple', 'orange' )
, new thingy( 'black', 'white' )
, new thingy( 'democrat', 'republican' )
);
print_r( $thingies );
thingy::sortByProp( $thingies, 'prop1' );
print_r( $thingies );
thingy::sortByProp( $thingies, 'prop2' );
print_r( $thingies );
https://stackoverflow.com/questions/124266
复制相似问题