我想出了一个非常丑陋的 PHP 解决方案,它使用array_count_values并将数据推送到一个数组中。它适用于我正在尝试做的事情。对于它的价值,我从Navigator DOM检索用户代理。它通常返回一个与此类似的字符串
Mozilla/5.0 (Linux; Android 7.0; SM-G892A Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) 版本/4.0 Chrome/67.0.3396.87 Mobile Safari/537.36
仅从这个字符串中,您就可以检索您需要的任何信息(设备、浏览器等)。
询问
$uniquevisitorsOS= $con->prepare("SELECT userAgent,
COUNT(DISTINCT userAgent) as countVisitor
FROM geolocation
WHERE last_update BETWEEN ? AND ? GROUP BY userAgent
ORDER BY last_update ASC ");
$uniquevisitorsOS->bind_param("ss",$c_datefrom,$c_dateto);
$uniquevisitorsOS->execute();
$visitorOSResult = $uniquevisitorsOS->get_result();
尽管
//
//
//create arrays of operating systems
$os_arr = Array();
//
//
while ($visitorOS = $visitorOSResult->fetch_assoc()) {
//
//
//
//
//operating systems
/*
Windows
Mac OS X
Android
Linux
Other
*/
//
//
//
//userAgent col
//
$userAgent = $visitorOS['userAgent'];
//
//
//
//find operating system
if (strpos($userAgent, 'Windows') !== false) {
//
//windows os
//
$os = 'Windows';
//
//
$os_arr[] = $os;
//
//
}else
if (strpos($userAgent, 'Mac OS X') !== false) {
//mac os
//
$os = 'Mac OS X';
//
//
$os_arr[] = $os;
//
//
}else
if (strpos($userAgent, 'Android') !== false) {
//android
//
$os = 'Android';
//
//
$os_arr[] = $os;
//
//
}else
if (strpos($userAgent, 'Linux') !== false) {
//linux
//
$os = 'Linux';
//
//
$os_arr[] = $os;
//
}else{
//Other
//
$os = 'Other';
//
//
$os_arr[] = $os;
//
//
}
//
//
}
//count values
$osArr = (array_count_values($os_arr));
//
//
//test print
print_r($osArr);
结果
Array ( [Linux] => 2 [Mac OS X] => 4 [Android] => 4 [Windows] => 1 )