每个周期索引一个数组(以秒为单位)

Posted

技术标签:

【中文标题】每个周期索引一个数组(以秒为单位)【英文标题】:Indexing an array every cycle (in seconds) 【发布时间】:2010-11-16 16:04:35 【问题描述】:

我必须每 10 秒将数据放入一个数组中。用修改后的时间戳索引这个数组是不是很傻

$a[时间戳] = 54; $a[时间戳+10] = 34;

或者在 javascript 中使用 setInterval() 并通过 Ajax 传递索引(对我来说非常糟糕)?

或者我有最好的选择吗?

更多细节:

我必须将实时数据与数组中的条目链接起来:这是我的问题。在第 3 个周期(从开始时间开始的 21 秒到 30 秒)。 我只有 15 个条目要存储。

我现在的代码:

$first_time = (int)date('Hi'); $_SESSION['mypile'][$first_time] = array_fill ($first_time, 15, array('paramA' => 0, 'paramB' => 0));

那么,Ajax 部分调用这个脚本:

$time = (int)date('Hi');
$_SESSION['mypile'][$time]['paramA'] = calcul_temp($_SESSION['mypile'], $time);

【问题讨论】:

【参考方案1】:

为什么不使用普通的数字索引数组?如果您不需要时间戳,那么:

$a[] = 54; 

$a[] = 34;

如果您确实需要时间戳,那么执行以下操作会更有意义:

$a[] = array('timestamp' => time(), 'number' => 54);

$a[] = array('timestamp' => time(), 'number' => 34);

然后在每个偏移量处你都有一个更有意义的关联数组:

echo 'Timestamp: ' . $a[0]['timestamp'] . ', Number: ' . $a[0]['number'];

如果这些操作快速连续发生,您可能会更好地使用microtime

【讨论】:

为什么这样更有意义?为什么不只用时间索引? 就像我添加的那样,我需要将当前时间戳链接到我的数组。也许我会在 Javascript 中做到这一点...... 确实可以,但是如果是普通数组,遍历会更有趣。【参考方案2】:

这似乎是一个很好的解决方案,但如果脚本要运行很长时间,您将不得不注意内存使用情况。

【讨论】:

好的,我应该更具体一些,我只有 15 个值要保留。【参考方案3】:

这很愚蠢;如果您设置了时间间隔,只需每 10 秒调用一次函数并将新数字添加到数组中的下一个索引。全局或在迭代范围内跟踪此索引。

【讨论】:

如果他需要记录时间戳怎么办?如果是这样,这是一个很好的方法。 每 10 秒,15 次,然后停止。我也有这个想法,就像 karim79 说的:让 php 索引数组,每 10 秒调用一次我的 PHP-ajax。 是的,这正是你应该做的。【参考方案4】:
$a['timestamp'] = time();
while (true)  
  $a['data'][] = getData(); 
  sleep(10); 

你可以把它做成一个类。然后该构造设置时间戳,并使用 SPL 数组索引和迭代器,它可以在 foreach 中循环并与一些数组函数一起使用。您可以创建一个方法来获取带有或不带有时间戳等的数组。

$dataCycle = new DataCycle();
while(true) 
  $dataCycle->addData(getData());
  sleep(10);

【讨论】:

我想让我的系统尽可能简单,这是一个 POC。【参考方案5】:

好的,所以我决定每 10 秒对时间戳进行四舍五入,以获得时间。简单,愚蠢,为我工作。

感谢您的想法。

【讨论】:

以上是关于每个周期索引一个数组(以秒为单位)的主要内容,如果未能解决你的问题,请参考以下文章

计算 SQL 中组的重叠时间(以秒为单位)

返回要使用 AudioTrack 播放的曲目的长度(以秒为单位)

SQL Datediff 以秒为单位,带小数位

MySql 以秒为单位的两个时间戳之间的区别?

Spark SQL datediff 以秒为单位

Oracle查询时差(以秒为单位)