我正在制作一个项目来绘制一段时间内的频率。服务器当前存储除计数之外我需要的所有数据,因为这将随着时间的推移而变化。我正在使用以下代码提取所需的所有数据:
<?php
$con = mysql_connect("127.0.0.1",xxx,xxx);
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("tweets", $con);
$results = array();
$result = mysql_query("SELECT company, time FROM data WHERE company = 'AAPL'");
while($row = mysql_fetch_array($result))
{
$results[] = $row;
}
$results = json_encode($results);
mysql_close($con);
echo $results;
?>
返回时,我有一个包含所有公司名称和时间的数组。我将如何计算一个时间范围内的频率,例如过去24小时内的频率,然后是前24小时的单独值?
答案 0 :(得分:0)
您只需遍历数据,具体代码取决于时间格式和所需结果的格式。你可以这样做:
$summary =array();
foreach($results as $result)
{
$day = substring($result['time'], 0, 10);
if(isset($summary[$day])){
$summary[$day]++;
} else {
$summary[$day] = 1;
}
}
根据时间格式编写函数getDay()。
答案 1 :(得分:0)
如果您的日期/时间值存储为MySQL日期时间(并且为了您的利益,我希望它们是),那么解决方案是微不足道的。选择特定时间段内的记录并按公司分组,例如
SELECT
`company`, COUNT(`company`) AS total
FROM
`data`
WHERE
`time` >= now() - INTERVAL 1 DAY
GROUP BY
company
在这个例子中,我使用MySQL来计算24小时的时间段,但你可以很容易地让PHP计算确切的时间/日期。
如果您想要一个纯PHP解决方案,那么首先将您按公司分组的时间存储在一个多维数组中。将您的时间从数据库格式转换为Unix时间。在我的例子中,我使用strtotime();如果你的db时间是一个时髦的格式,那么你需要做一些其他事情来转换它们。
$result = mysql_query("SELECT company, time FROM data");
while($row = mysql_fetch_array($result)) {
$results[$row['company']] = strtotime($row['time']);
}
然后简单地循环数组并进行评估。
// 24 hours before now
$start = time() - ( 24*60*60);
$lastTwentyFourHours = array();
foreach ( $results as $company => $times ) {
if ( !isset($lastTwentyFourHours[$company]) ) {
$lastTwentyFourHours[$company] = 0;
}
foreach ( $times as $time ) {
if ( $time >= $start ) {
$lastTwentyFourHours[$company]++;
}
}
}
print_r($lastTwentyFourHours);