現在の PHP インタープリター (5.4) がアイテムごとの配列ソートではなく、約 3 ~ 5 個のコピーを単純に実行できるほどスマートなソリューションを作成するにはどうすればよいでしょうか?
要素をインデックス付き配列に挿入する方法をいくつか知っていることに注意してください。しかし、これは私の理解を満足させません。たとえば、C++ では、 std::copy を使用して何かを実行したり、構造体または共用体を複数要素の配列カーソルとして作成したりできます。
だから私はどういうわけかPHPのルールで遊んでいるのだろうか、どの構文を使用して、ボンネットの下で何かに近いものを持つことができるのだろうか
[あるインデックスからA の終わりまでの要素の範囲] を一時 C にコピーします
BをA[インデックス]にコピーし、
C を A[Index+count(B)] にコピー
これより...
$MasterItemList = $Page[$CurrentPage]->GetItems(); /* Returns an array with 512 Items. */
$UpdateList = GetUpdatePage(); /* Returns multi-dimensional array such that:
$result[][0]=an index and
$result[][1]=a list of items */
foreach($UpdateList as $Update)
{ foreach($Update as $cursor => $ItemList)
{
$cursor=$cursor+0; //to int..
$numitems=count($ItemList);
if($ItemList[0]->NewAddition)
{
$BeforeUpdate=array_splice($MasterItemList,0, $cursor, true);
$AfterUpdate=array_splice($MasterItemList, $cursor+$numitems, 0);
$MasterItemList=array_merge($BeforeUpdate,$ItemList,$AfterUpdate);
$Page[$CurrentPage]->OffsetCorrection+=$numitems;
}
else
{
$i=0;
foreach($ItemList as $LineItem)
{
$MasterItemList[$cursor+$i] = $LineItem;
$i++;
}
}
}
}
これを書き留めていくつかのエラーがある場合は、ご容赦ください。お知らせください。修正します。
つまり、このメソッドを使用してロジックを直接実行できるようにするために、適切な参照とスコープがインタープリターで利用できるとは思いません。それはすでに非常に高価に見えます.. PHP でこれを「正しい方法」で実行するにはどうすればよいでしょうか?
例:
// An Update List
Array(
[0] => Array(
[0] => 31
[1] => Array(
[1] => stdClass Object
(
[NewAddition] => false
[Name] => "********"
[Date] => 1364920943
[Active] => 1
.
.
.
)
[2] => stdClass Object
(
[NewAddition] => false
[Name] => "********"
[Date] => 1364920943
[Active] => 1
.
.
.
)
[3] => stdClass Object
(
[NewAddition] => false
[Name] => "********"
[Date] => 1364920943
[Active] => 1
.
.
.
)
)
)
)
AndMasterItemList
は単にこれらの同じオブジェクトの配列です ( class Item
)。
いくつかの注意事項:
- このデータは、このスクリプトにとって重要な場所では、純粋にシーケンシャルな方法でのみアクセスされます。
- スクリプトのこの部分では、新しく挿入されたセットの最初の項目のみを更新のためにチェックする必要があります。セット内の以下のすべてのアイテムは、常に新しいものになります。
- 512 を超える項目は、次のページ読み込みに自動調整されます。ページのサイズを調整して、配列の並べ替えのパフォーマンスとデータのフェッチのパフォーマンス (非同期バッファー) を交換できます。