有没有办法维护已排序的对象数组?
例如,如果我有一个具有属性ID,Date,Name和这些对象的集合的对象:
$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。
中集合中的项目我认为有一些答案可以让对象按排序顺序返回,但为了提高效率,我认为最好对insert进行排序,因为在我的情况下,“sort by”变量永远不会改变。
更新 所以根据评论,我应该在每次添加某些内容时使用整个数组,但这似乎有点内存密集......
由于数组总是以排序顺序开始,我可以通过遍历数组来识别我想要插入的位置(这是否有效,是否有更好的方法?)。一旦我发现我怎么能在阵列中“插入”一个新对象?
我不认为数组会非常大,但我想以最有效的方式实现它。
答案 0 :(得分:1)
如果您在添加后并不热衷于使用数组(尽管我建议使用它;实际上这不会是性能问题,它会使代码保持可读性。
但是,如果您肯定不想这样做,那么您可以如您所说,遍历数组并找出插入位置:
$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
插入一个位置
答案 1 :(得分:0)
这是一个函数的一个很好的例子,它可以根据你希望按
排序的任何键对数组进行排序http://www.php.net/manual/en/function.sort.php#99419
在您的示例中,您应该像以下一样运行它: array_sort($col, 'Name', SORT_DESC));
请记住,每次向数组添加新项目时,每次都会对整个数组进行排序