gpt4 book ai didi

php - 如何最好地将元素添加到 PHP 中任意索引处的数组?

转载 作者:行者123 更新时间:2023-12-04 05:03:39 34 4
gpt4 key购买 nike

我怎样才能编写一个解决方案,让当前的 PHP 解释器 (5.4) 足够聪明,可以简单地做大约 3-5 个副本,而不是一个完整的逐项数组排序?

请注意,我知道一些将元素插入索引数组的方法。然而这并不能满足我的理解。例如在 C++ ,您可以使用 std::copy 做一些事情,或者将结构或联合作为多元素数组游标。

所以我想知道我是否以某种方式遵守 PHP 的规则,人们可以使用什么语法在幕后拥有更接近于

Copy the [range of elements from some index to the end of A] into temp C

Copy B into A[Index],

Copy C into 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 做到这一点“正确的方式”?

Examples:


// 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
.
.
.
)

)
)
)

MasterItemList只是这些相同对象的数组( class Item )。

需要注意的几点:
  • 此数据仅以纯粹的顺序方式在任何对这个脚本重要的地方访问。
  • 在这部分脚本中,只需要检查新插入集合中的第一项是否有更新。该系列中的所有项目将始终是新的。
  • 超过 512 的项目会自动调整到下一个页面加载中。我可以调整页面大小以在数组排序性能和数据获取性能(异步缓冲)之间进行交易。
  • 最佳答案

    首先,PHP数组不是数据结构意义上的“数组”;它们实际上是哈希表和双向链表合二为一。当您对数组进行索引时,例如与 $list[$i] $i散列以找到相应的元素;这不是简单的算术,因为它是例如C++。

    此外,由于数组也是链表,所以 array_splice 的实现比看起来更有效,至少如果被删除的部分足够小(散列新项目通常很快,并且在链表的某个位置插入项目是恒定时间)。

    当然,这意味着 PHP 数组比“纯”数组消耗更多的内存,而且如果您只想基于索引访问,它们也会更慢。在这些情况下,SPL 提供 SplFixedArray 这是一个词的数据结构意义上的数组的实现。

    在您的特定情况下,array_splice应该是你的第一选择;您只需一次调用即可插入一个数组块:

    array_splice($MasterItemList, $cursor, 0, $ItemList);

    关于php - 如何最好地将元素添加到 PHP 中任意索引处的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15806366/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com