php mysqli对象搜索和排序

时间:2012-04-27 05:45:03

标签: php arrays search object mysqli

使用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";
}

一切都很好,但这是我的问题,有重复的用户名,我不知道手中的查询中会有哪些名字,可能是bob,sue,james。或者它可能是汤姆,迪克,哈利,汤姆。我需要做的是打印出每个用户名以及它在此对象中显示的次数。由于非常奇怪的原因,我不能在查询中使用像group by和count(*)这样的整洁的东西(不要问它真的很奇怪)。所以我的问题是,循环返回对象(或者如果需要的话是关联数组)的最快方法是获取每个唯一名称以及它出现的次数。谢谢你的帮助,如果这是一个新生的CS问题我道歉,我是自学成才,总是填补空白!

2 个答案:

答案 0 :(得分:1)

e.g。

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

答案 1 :(得分:1)

如果您确实必须在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;
}