【问题标题】:php mysqli object search and sortphp mysqli 对象搜索和排序
【发布时间】:2012-05-07 21:23:25
【问题描述】:

使用 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 问题,我深表歉意,我是自学成才,总是在填补空白!

【问题讨论】:

    标签: php arrays search object mysqli


    【解决方案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;
    }
    

    【讨论】:

    • 完美,效果很好!我唯一的评论是在您的示例中使用 fetch_array() 而不是 fetch_object() 。谢谢,不仅是代码,还有数组教育!
    【解决方案2】:

    例如

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

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      相关资源
      最近更新 更多