【问题标题】:sorted array in phpphp中的排序数组
【发布时间】:2021-05-02 21:15:55
【问题描述】:

在 c#、java 等许多语言中,我们已经对数组进行了排序!这意味着当我们向其中添加一些元素时,它将根据排序方法在正确的索引中添加新元素... 用这个算法插入元素太快了!

但据我所知,在 php 中,我们可以使用 ksort、sort 或类似的方法对数组进行排序,但我没有在 php 中找到类似排序数组的东西,以便更好地管理我们希望始终排序的数组!

如果我弄清楚 ksort 是如何工作的,我很困难,我可以自己编写排序数组,但我没有找到任何解决方案来按索引将项目添加到数组中......

有谁知道如何在 php 中实现排序数组?或者 有谁知道如何在我想要的任何索引中添加元素?


更新 1

我在 php 中需要这样的东西:https://www.tutorialsteacher.com/csharp/csharp-sortedlist

我有一个巨大的数组(大约 2m 行),我应该根据价格对其进行排序!

目前我按ksort 对其进行排序,但我对性能造成了巨大影响


更新 2

我想为我的加密货币交易所创建交易匹配引擎,现在我使用 redis 作为我的数据输入,但是当我使用 php 数组作为我的数据输入时,性能提高了大约 250 倍。

(在 redis 中我可以添加大约 3.5k/s 的订单)

我测试了我的代码,发现ksrot 占用了我代码运行时间的大约 83%。现在我想使用排序列表来提高我的表现。现在我可以使用ksort 处理大约 930k/s 的订单(添加数组、排序数组、迭代数组顶部)。

【问题讨论】:

  • 如何在我想要的任何索引中添加元素? ...$arr[45] = "something";
  • 使用SPL extension 的堆怎么样? cmets中有一个example
  • @ADyson $arr[45] = "something" 它会将 something 添加到键 45 而不是数组 45 的索引...例如,我想向 2 添加一个元素!这意味着当我在数组上使用 foreach 时,我会在第二次迭代中获取该元素
  • @PtrTon 如果我使用堆,我可以在堆的末尾添加元素!我想在任何我想要的地方添加我的元素! public SplHeap::insert ( mixed $value ) : void

标签: php arrays sorting sortedlist


【解决方案1】:

最后我找到了解决方案,它是: SPL EXT 中的优先级队列 https://www.php.net/manual/en/class.splpriorityqueue.php

您可以将比较方法传递给它,它会排序存储!

我将使用 usort 和优先级队列解决方案创建某种基准进行比较,以获得更准确的决策:)

tnx @PtrTron 提出建议

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多