排序的对象数组

时间:2013-02-03 18:30:42

标签: php arrays sorting

有没有办法维护已排序的对象数组?

例如,如果我有一个具有属性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”变量永远不会改变。

更新 所以根据评论,我应该在每次添加某些内容时使用整个数组,但这似乎有点内存密集......

由于数组总是以排序顺序开始,我可以通过遍历数组来识别我想要插入的位置(这是否有效,是否有更好的方法?)。一旦我发现我怎么能在阵列中“插入”一个新对象?

我不认为数组会非常大,但我想以最有效的方式实现它。

2 个答案:

答案 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)); 

请记住,每次向数组添加新项目时,每次都会对整个数组进行排序