Comme le suggérait Mario, vous pouviez facilement mettre les données dans une base de données, et il serait très simple d'obtenir les statistiques que vous recherchez. Je vais vous montrer un exemple de cela avec une base de données SQLite3.
D'abord, vous voudriez importer vos données. Vous pouvez utiliser file_get_contents
, mais parce que je devais tester cela, je viens importé d'une chaîne, et parce que je ne sais pas ce que vos données ressemble vraiment, je viens de l'inventer:
$db = new SQLite3(__DIR__ . '/logs.db');
$db->exec('
CREATE TABLE log (
input TEXT,
methodUsed TEXT,
User TEXT,
userInfo TEXT,
datetime TEXT
)
');
$str = "~a|3|Bob|aaa|12|04|2000|23|05\n
~b|6|Bill|bbb|08|18|2017|14|18\n
~c|4|Tina|ccc|09|28|2016|16|33\n
~d|7|Doug|ddd|11|07|2017|08|24\n
~e|1|Fred|eee|01|22|2015|00|16\n";
// Get an array of lines
$lines = explode(PHP_EOL, $str);
// Loop through the lines
foreach($lines as $line)
{
if(! empty($line))
{
list(
$input,
$methodUsed,
$User,
$userInfo,
$month,
$day,
$year,
$hour,
$minute
) = explode('|', $line);
$dateTime = date('Y-m-d H:i:s', strtotime($year . '/' . $month . '/' . $day . ' ' . $hour . ':' . $minute . ':00'));
$db->exec("
INSERT INTO log (input, methodUsed, User, userInfo, datetime)
VALUES (\"$input\",\"$methodUsed\",\"$User\",\"$userInfo\",\"$dateTime\")
");
}
}
Maintenant que il y a une base de données avec des données, il est vraiment facile de faire les requêtes pour vous donner les statistiques que vous voulez. Vous obtenez une connexion à nouveau:
$db = new SQLite3(__DIR__ . '/logs.db');
Ce juste sélectionne tous les utilisateurs dans chaque ligne
$results = $db->query('SELECT User FROM log');
Ceci permet de sélectionner tous de toutes les lignes où la datetime est au cours des 6 derniers mois
$results = $db->query('SELECT * FROM log WHERE datetime > datetime("now", "-6 months")');
Ceci sélectionne toutes les lignes où se trouve le datetime un jour spécifique
$results = $db->query('SELECT * FROM log WHERE date(datetime) = "2017-08-18"');
Accéder à un utilisateur le plus commun un jour spécifique
$results = $db->query('SELECT User, COUNT(*) as cnt FROM log WHERE date(datetime) = "2017-08-18" GROUP BY User ORDER BY cnt DESC LIMIT 1');
Obtenez l'utilisateur le plus commun de tous les enregistrements
$results = $db->query('SELECT *, COUNT(*) as cnt FROM log GROUP BY User ORDER BY cnt LIMIT 1');
Enfin, afficher les résultats de l'un des résultats ci-dessus (choisissez 1 à un moment):
while($row = $results->fetchArray(SQLITE3_ASSOC))
{
echo '<pre>';
print_r($row);
echo '</pre>';
}
Je suis sûr que vous voulez faire vos propres modifications, ou peut-être utiliser une base de données MySQL à la place (ce qui est ce que je ferais), mais cela devrait vous aider à démarrer.J'ai testé ce code, il devrait donc répondre à vos besoins, si vous envisagez ce genre de chose.
trop large. Isolez votre problème. Montrez votre tentative de codage. Montrer quelques exemples d'entrée. – mickmackusa
Utilisez une base de données, même temporairement, avec LOAD DATA INFILE - pour faire de cette pratique sans grandes quantités de code. – mario