2017-03-20 3 views
0

aufgetreten ich diese Array Datenstruktur:PHP zählen, wie oft pro Woche bestimmte Operation

$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']; 

In diesem Array I Operationen speichern, die von Website-Besuchern durchgeführt wurde. Offensichtlich kann Besucher durch eine ID-Nummer identifiziert werden.

Was ich tun möchte, ist zu zählen, wie oft in einer Woche (zwischen Montag und Sonntag einschließlich) jeder Besucher 'send_email' Operation verwendet.

Zum Beispiel: erste Aufzeichnung mit 'send_email' Operation zeigt, dass diese Operation in '2017-03-12' (Sonntag) passiert ist, was bedeutet, dass diese Operation nur einmal in dieser Woche für Benutzer mit einer ID = 1 stattfand .

Andere drei 'sent_email' Operationen für Benutzer mit einer ID = 1 sind in einer anderen Woche dreimal aufgetreten. (2017-03-13, 2017-03-13, 2017-03-14 diese drei Termine gehören zur selben Woche).

Ich weiß, dass ich wahrscheinlich jeden Datensatz durchlaufen muss und irgendwie diese Daten überprüfen muss, wenn sie derselben Woche gehören, aber ich fühle mich verwirrt und stecke hier, ich verstehe logische Schritte nicht, um es zu erreichen. Ich wäre wirklich dankbar, wenn mir jemand eine Erklärung oder einen Pseudocode geben könnte, was immer mir helfen würde, dieses Problem anzugehen, ich genieße es wirklich, Probleme selbst zu lösen, aber weil ich feststecke, brauche ich nur jemanden, um mich hochzubringen Laufen.

Vielen Dank im Voraus für jede Hilfe, die Sie zur Verfügung stellen können.

Antwort

2

Das DateTime-Objekt und die strtotime() -Funktionen verstehen beide relative Datumszeichenfolgen, so dass Sie nette Dinge wie "letzten Dienstag" und "vor 3 Tagen" tun können.

Einige Pseudo-Code, den Sie zu erhalten begonnen:

// 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 
Verwandte Themen