[英]In PHP, what is the best way to unsort a sorted array of objects when given the original order?
[英]Sorted Array of Objects
有什么方法可以維護對象的排序數組?
例如,如果我有一個對象,其屬性ID,日期,名稱以及這些對象的集合:
$col = array();
public function addNewObject($id, $date, $name)
{
$col[] = new Object($id, $date, $name);
//but instead of appending, it should place it by Name desc
}
如果我調用類似getObjects的方法,它將按Name desc返回集合中的項目。
我認為有一些答案可以使對象按排序順序返回,但是出於效率考慮,我認為最好在插入時進行排序,因為在我的情況下,“ sort by”變量永遠不會改變。
更新:因此,基於注釋,每次添加一些東西時我都應該對整個數組進行排序,但這似乎占用大量內存...
由於數組始終以排序順序開始,因此我可以通過遍歷數組來標識要插入的位置(這是否有效,有更好的方法嗎?)。 一旦發現如何將新對象“插入”到陣列中?
我不認為數組會很大,但是我想以最有效的方式實現這一點。
如果您不希望在添加后重新使用該數組(盡管我會推薦這樣做;實際上,這不會是性能問題,它會使代碼保持可讀性。
但是,如果您絕對不想這樣做,則可以按照您所說的遍歷數組並找出要插入的位置:
$col = array();
public function addNewObject($id, $date, $name){
//Find the index to insert at
$index = 0;
foreach($col as $i => $item){
if($item->name > $name){
//This item is after the item we want to insert.
//Use the previous index and stop traversing
break;
}
$index = $i;
}
$col = array_splice($col, $index, 0, new Object($id, $date, $name));
}
由於https://stackoverflow.com/a/3797526/505722,使用array_splice
在任意位置插入
這是一個函數的很好的例子,該函數可以根據您要排序的任何鍵對數組進行排序
http://www.php.net/manual/zh/function.sort.php#99419
在您的示例中,您應該像這樣運行它:
array_sort($col, 'Name', SORT_DESC));
請記住,每次將新項目添加到數組時,每次都會對整個數組進行排序
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.