PHP MySQLi 对象搜索和排序


php mysqli object search and sort

使用 php 5.3 和 mysqli,我从一个只有用户名的查询中返回一个结果集,如下所示

$query_username = "SELECT username FROM some_table WHERE param = 1";
$username =  $mysqliObject->query($query_username);
while($row_username = $username->fetch_object()){
print "<br>Username: $row_username->username";
}

一切都很好,但这是我的问题,有重复的用户名,我不知道哪些名字会在事先的查询中,可能是鲍勃、苏、詹姆斯。或者可能是汤姆,迪克,哈利,汤姆。我需要做的是打印出每个用户名以及它在此对象中出现的次数。出于非常奇怪的原因,我不能在查询中使用整洁的东西,例如 group by 和 count(*)(不要问它真的很奇怪)。所以我的问题是,循环遍历返回的对象(或关联数组,如果需要)以获取每个唯一名称以及它出现的次数的最快方法是什么。感谢您的帮助,如果这是一个新生 CS 问题,我深表歉意,我是自学成才的,总是填补空白!

如果你真的必须在 PHP 端而不是使用 GROUP BY 子句:

while($row_username = $username->fetch_object())
{
    if(isset($usernames[$row_username['username']]))
    {
        $usernames[$row_username['username']]++;
    }
    else
    {
        $usernames[$row_username['username']] = 1;
    }
}
asort($usernames);
// use ksort() to sort by username instead of the count
// print out the usernames
foreach($usernames as $username => $count)
{
    echo $username . ", count: " . $count;
}

例如

$users = array();
while( false!==($row=$result->fetch_array()) ){
    if ( isset($users[$row['username']]) ) {
        $users[$row['username']] += 1;
    }
    else {
        $users[$row['username']] = 1;
    }
}
asort($users);