【问题标题】:PHP with Spl DataStructures as replacement for multi-dimensional array使用 Spl DataStructures 替代多维数组的 PHP
【发布时间】:2013-07-18 11:10:09
【问题描述】:

我看过很多关于这个主题的问题,但没有一个涉及我的情况。

我正在构建一个基于 5 个类的 ACL 模块:

  1. 角色
  2. 特权
  3. 包装器(猜猜它的作用..)Privilege、Role 和 Group 类的工厂
  4. 用于组/角色的 AccessList 存储(基于使用和案例)

我正在考虑使用SplQueue来存储权限级别(主要用于继承的权限)所以我正在考虑使用单个对象来存储所有内容并且不认为普通的多维数组将是最佳选择.流程类似于 this paste,它是 TL;DR.. 抱歉。

所以我的问题是,在我的情况下,SplQueue 会不会有点过头了?

我应该使用和替代 Spl 数据结构,如果可以,是哪一种?

编辑 好吧,我想不出一个很好的用法示例,所以让我们继续使用基于 UNIX 的 GBAC。

【问题讨论】:

  • 数据结构应该支持在其上执行的操作的用例。你没有提到任何一个。
  • 目的很笼统,等我写完,一会更新
  • 我认为这对于小型阵列来说确实是矫枉过正。 (小是低于 100-1000 个元素)。内部哈希图主要提供足够快的访问。当您确实需要 log(n) 访问和插入时间等时,SPL 很好。
  • 嗯,我猜你是对的。普通的 ACL 应该可以在任何级别的 PHP 应用程序中发挥作用。那么这里是代表:D
  • 我建议你用你是如何进行的回答你自己的问题。

标签: php acl spl


【解决方案1】:

如果您想以对象形式存储数据,请使用SplObjectStorage。 SplQueue 对于小数组会过大。

SplQueue 适用于 FIFO。

因此您不能直接访问最后一个或接近最后一个,这需要时间。

我建议您使用数组而不是SplQueue,因为您可以通过数组索引直接访问任何元素。

你也可以查看这个问题的答案:Associative Array versus SplObjectStorage

您还可以检查 SPLobjectStorage 和数组的性能,here is the code

了解更多read here

SplObjectStorage 绝对是线性缩放的。阵列性能为 较小的数据集较难预测(较大的标准偏差)。而且 SplObjectStorage 确实是在集合中存储大量对象的更好解决方案。

因此,如果您的数据很小,那么您应该使用数组,否则使用 SplObjectStorage 处理大量数据。

【讨论】:

  • 如果数据变大,数组会有什么缺点吗,澄清一下:总共20个角色,6个组和1个页面标识符(页面标识符用于确定应用程序的特定部分)6x1 - 组定义和组内定义 *(6x1)x20*(至少对于我的架构/头部)这会导致存储中的 120 个定义在 100 页应用程序中急剧增长。如果我使用数组或 SplObjectStorage,会有什么缺点吗?谢谢!
  • @DaGhostmanDimitrov 如果您有大约 120 个数据,那么您可以使用该数组,如果您有数千条记录,则使用 SplObjectStorage,因为我在答案中添加了链接。您可以看到性能问题将出现在大数据的数组中,而对于小数据,SplObjectStorage 的性能会比数组差。现在它取决于您的数据。
  • 给我建议:我应该采用哪种方法?使用数组并使结构准备好低数据或高数据(想不出更好的词,抱歉,英语不是我的母语)
  • @DaGhostmanDimitrov 我建议您使用SplObjectStorage,因为您已经描述了您拥有多级权限,这将创建一个组合。所以会有很多记录所以使用SplObjectStorage。其他事情取决于您的喜好。
  • 感谢关注和详细解释
猜你喜欢
  • 2011-08-17
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 2011-08-23
相关资源
最近更新 更多