PHP计算每周执行某次操作的次数

时间:2017-03-20 23:59:32

标签: php arrays algorithm date comparison

我有这个数组数据结构:

$records = [];

$records[] = ['id' => 1, 'date' => '2017-03-12', 'operation' => 'sent_email'];
$records[] = ['id' => 1, 'date' => '2017-03-13', 'operation' => 'sent_email'];
$records[] = ['id' => 1, 'date' => '2017-03-13', 'operation' => 'sent_email'];
$records[] = ['id' => 1, 'date' => '2017-03-14', 'operation' => 'forgot_password'];
$records[] = ['id' => 1, 'date' => '2017-03-14', 'operation' => 'sent_email'];
$records[] = ['id' => 2, 'date' => '2017-03-14', 'operation' => 'sent_email'];
$records[] = ['id' => 2, 'date' => '2017-03-14', 'operation' => 'forgot_password'];
$records[] = ['id' => 1, 'date' => '2017-03-27', 'operation' => 'sent_email'];
$records[] = ['id' => 1, 'date' => '2017-03-29', 'operation' => 'sent_email'];

在此数组中,我存储由网站访问者完成的操作。显然,访客可以通过身份证号码识别。

我想要做的是计算每个访客使用'sent_email'操作一周内(周一到周日之间)的次数。

例如:带有'sent_email'操作的第一条记录显示此操作发生在'2017-03-12'(星期日),因此这意味着对于id = 1的用户,该操作仅在该周发生一次。

对于id = 1的用户,接下来的三个'sent_email'操作在另一周内发生了三次。 (2017-03-13,2017-03-13,2017-03-14这三个日期属于同一周)。

我知道我可能需要循环遍历每条记录,并以某种方式检查这些日期是否属于同一周,但我感到困惑并陷入困境,我不理解完成它所需的逻辑步骤。我真的很感激,如果有人能给我一个解释或伪代码,无论是什么,这将有助于我解决这个问题,我真的很喜欢自己解决问题,但因为我被困,我只是需要有人来帮助我运行

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:2)

DateTime对象和strtotime()函数都理解相对日期字符串,因此你可以做一些整洁的事情,比如" last tuesday"和" 3天前"。

一些伪代码可以帮助您入门:

// figure out when your monday is
monday = ...

// figure out when your sunday is
sunday = ...

// loop over all records
foreach $record:

    // skip records outside the date range you want
    if date < monday or date > sunday then skip this record;

    // skip records not of the type you want
    if operation != email then skip this record;

    // register a hit for this user
    increment counter for user