基本上,你想要做的是使用一系列「短路」比較。一個天真的例子,上面給出的標準,可能看起來像這樣(未經):
function mySort($a, $b) {
if ($a->name < $b->name) {
return -1;
}
if ($a->name > $b->name) {
return 1;
}
// If we get this far, then name is equal, so
// move on to checking type:
if ($a->type < $b->type) {
return -1;
}
if ($a->type > $b->type) {
return 1;
}
// If we get this far, then both name and type are equal,
// so move on to checking date:
if ($a->date < $b->date) {
return -1;
}
if ($a->date > $b->date) {
return 1;
}
// If we get this far, then all three criteria are equal,
// so for sorting purposes, these objects are considered equal.
return 0;
}
正如我所說的,雖然,這是一個天真的解決方案,這是非常不可擴展的。我建議使用稍微更強大的解決方案,在那裏你的排序不會被硬編碼到排序方法中。採取這種方法,例如(未測試):
// These are the properties to sort by, and the sort directions.
// They use PHP's native SORT_ASC and SORT_DESC constants.
$this->_sorts = [
'name' => SORT_ASC,
'type' => SORT_ASC,
'date' => SORT_ASC
];
// Implemented as a class method this time.
protected function _mySort($a, $b) {
foreach ($this->_sorts as $property => $direction) {
if ($a->{$property} < $b->{$property}) {
return $direction === SORT_ASC ? -1 : 1;
}
if ($a->{$property} > $b->{$property}) {
return $direction === SORT_ASC ? 1 : -1;
}
}
return 0;
}
現在,添加或去除不同的排序字段或排序方向是添加或修改一個數組元素一樣簡單。不需要修改代碼。
可能的重複http://stackoverflow.com/questions/124266/sort-object-in-php –
這不是我在這裏問的,在那個線程中,它仍然在一個層次上排序。我在問是否有一種排序方式。 – kennypu