当前,我正在收集台式机和移动设备的数量...根据ARRAY
中的总计项目,计数正确返回了。但是,现在我需要删除重复项...示例user_id = 001
可以有10个IOS条目...所以我需要做类似的事情... IF $row['last_login'] Date()
是最新的,然后获取该条目并计为1。user_id = 001的最终结果将是1个条目计数,而不是10个(我现在要知道)。
if ($results = $dbh->runQuery($sql)) {
foreach ($results as $key=>$row){
$users[$row['user_id']][] = array('user_id'=>$row['user_id'],
'racid' => $row['racid'],
'email' => $row['email'],
'last_login' => $row['last_login'],
'fname' => $row['fname'],
'lname' => $row['lname'],
'role_id' => $row['role_id'],
'role_name' => $row['role_name'],
'ios_device_token' => $row['ios'],
'roid_device_token' => $row['roid'],
'p_name' => $row['p_name']);
if($row['ios'] !== null && $row['ios'] !== '' && $row['ios'] !== '-1'){
$ios_count++;
}
if($row['android'] !== null && $row['android'] !== '' && $row['android'] !== '-1'){
$android_count++;
}
$invalidValues = [null, "", -1];
if(in_array($row['ios'], $invalidValues) && in_array($row['android'], $invalidValues)){
$desktop_count++;
}
}
}
答案 0 :(得分:0)
使用关联数组,您可以按照自己的标准“区分”。类似于以下代码。
但是@esqew说(评论您的问题)有关更改SQL而不是PHP的说法可能是一个更清洁的角度,尤其是因为PHP通常非常慢。
if ($results = $dbh->runQuery($sql)) { // that exists already
$latestEntries = []; // assoc. array: key=user, value=row
foreach ($results as $row) { // that exists already
// assuming 'last_login' is a timestamp or any format that can be used in inequality
// otherwise cook your own comparison function
if (
!$latestEntries[$row['user_id']]
|| $latestEntries[$row['user_id']]['last_login'] < $row['user_id']['last_login']
) {
$latestEntries[$row['user_id']] = $row;
}
// rest of your code that exists already
}
// here, after the loop, $latestEntries has the latest entry for each user found in $results
}