【发布时间】:2012-01-04 18:11:59
【问题描述】:
我有一个 SplObjectStorage 实例,它存储要在容器中呈现的元素对象。我希望能够有效地从商店中的任何随机位置添加和删除对象。
例子:
<?php
$store = new SplObjectStorageWrapper;
$obj1 = new Obj;
$obj2 = new Obj;
$obj3 = new Obj;
$store->attach($obj1);
$store->attach($obj2);
$store->insertAtIndex($obj3, 1);
//Storage should now be organized as $obj1, $obj3, $obj2
我将如何实现insertAtIndex 方法?我是否使用LimitIterator 在某个位置后分离和重新连接孩子?使用基于数组的对象存储已被证明比SplObjectStorage 实例慢得多。
我想实现的其他方法包括removeAtIndex(integer) 和indexOf(object)
【问题讨论】:
-
你需要SplObjectStorage的Set部分吗,例如没有重复?如果没有,请尝试使用 SplPriorityQueue 类。它与
insertAt的工作方式不完全相同,但它可能对您的用例来说已经足够了。 -
戈登,不是真的。但是由于性能上的巨大差异,我 /do/ 需要使用 SplObjectStorage 而不是基于数组的解决方案。