【问题标题】:I need an efficient PHP array lookup我需要一个高效的 PHP 数组查找
【发布时间】:2010-10-26 03:46:58
【问题描述】:

假设我有一些小部件,每个小部件都有事件。每个事件都有一个唯一的时间戳和一个非唯一的值。

由于时间戳相当大,无法用作索引(散列?),我正在添加这样的事件:

$_SESSION['widgets']['datasets'][$i][] = 
                                    array('timestamp' => $ts, 'value' => $value);

但是,并非每个小部件在每个时间戳都有一个事件,因此存在间隙。编辑:这意味着可能在周一、周二、周三输入了小部件 A,在周一、周三、周五输入了字段 B。然后,我将遍历周一、周二、周三、周四、周五、周六、周日,并想知道当天哪个小部件发生了事件以及它的值是多少。

从数据库中读取所有事件后,我遍历所有已知的时间戳,然后遍历每个小部件以查看它是否具有带有该时间戳的事件。

我可能效率低下。

最好的编码方式是什么?

for each timestamp
   for each widget
      if the widget has an entry with the timestamp, get the value  <=== how?

【问题讨论】:

  • 你应该使用=而不是.=,你没有连接一个字符串。
  • +1 谢谢。代码在此过程中发生了变异,而这一点被忽略了。

标签: php


【解决方案1】:

既然您是从数据库中获取这些数据,是否可以将您的查询更改为仅返回带有时间戳的记录?这样一来,您就无需对数据执行任何操作。

【讨论】:

  • 我想我没有解释清楚。我会更新问题。 +1 回复。谢谢。
【解决方案2】:

您能否只存储对与时间戳关联的小部件的引用以及时间戳?

【讨论】:

  • +1 谢谢。问题好像不太清楚,所以我更新了。
【解决方案3】:

尽管您进行了编辑,但我仍然不认为您要做什么很清楚。

这是按排序顺序检索某些数据的练习吗?您是否需要有关数据库 SQL 代码或 PHP 代码的帮助以在之后进行处理?我们正在谈论的这些小部件和事件是什么,我们正在用它们做什么?

由于时间戳相当大,无法用作索引(散列?)

我不明白为什么时间戳太大而不能用作索引。您是在谈论数据库中的“索引”还是 PHP 数组中使用的“键”?无论哪种方式,如果您所说的时间戳是我想象的时间戳,我看不出它会太大。

每个事件都有一个唯一的时间戳和一个非唯一的值。

这似乎很不寻常——你的意思是相反的吗?也许如果你能说出这些事件是什么,我会更好地理解。

【讨论】:

  • +1 抱歉,不清楚。我已更新问题并希望对您有所帮助。
猜你喜欢
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多