4
私は、レンダリングされる要素オブジェクトをコンテナに格納するSplObjectStorageインスタンスを持っています。私は効率的に店舗内の任意の場所からオブジェクトを追加したり削除したりできます。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
インスタンスよりもはるかに遅いことが判明しました。私が実装したい
他の方法は、それがこれを行う最も簡単な(と明らかに最も効率的な)方法はSplObjectStorage
を延長するとLimitIterator
を利用することで判明removeAtIndex(integer)
とindexOf(object)
SplObjectStorageのSet部分が必要ですか?重複はありませんか?そうでない場合は、代わりにSplPriorityQueueクラスを試してください。 'insertAt'とまったく同じ働きはしませんが、あなたのユースケースには十分かもしれません。 – Gordon
ゴードン、そうではありません。しかし、パフォーマンスの大きな違いのために、アレイベースのソリューションの代わりにSplObjectStorageを使用する必要があります。 – Kenaniah