You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从用户角色数组中统计ROLE_ADMIN的数量?

统计ROLE_ADMIN角色数量的解决方案

嘿,我来帮你搞定这个统计ROLE_ADMIN数量的问题!针对你的场景,我给你几种不同的实现思路,你可以根据实际情况选:

1. 遍历用户时直接统计(最省内存)

不用先把所有角色都存到数组里,在遍历用户的过程中直接判断计数,这样能节省不必要的内存开销,尤其用户量多的时候更明显:

$users = $this->entityManager->getRepository(User::class)->findAll();
$adminCount = 0;

foreach ($users as $user) {
    // 检查当前用户是否拥有ROLE_ADMIN角色
    if (in_array('ROLE_ADMIN', $user->getRoles())) {
        $adminCount++;
    }
}

return $adminCount;

2. 基于已有的$countUsers数组统计

如果你已经有了像示例里那样的$countUsers角色数组,也可以直接遍历这个数组来统计:

方法一:普通嵌套循环

$countUsers = [ [ "ROLE_SUPER_ADMIN" ], [ "ROLE_STRATEGIST", "ROLE_ADMIN" ], [ "ROLE_EDITOR" ], [ "ROLE_STRATEGIST", "ROLE_ADMIN" ] ];
$adminCount = 0;

foreach ($countUsers as $roles) {
    if (in_array('ROLE_ADMIN', $roles)) {
        $adminCount++;
    }
}

// 示例数组会输出2
return $adminCount;

方法二:用array_reduce简化代码

喜欢简洁写法的话,可以用PHP的array_reduce函数来实现:

$countUsers = [ /* 你的角色数组 */ ];
$adminCount = array_reduce($countUsers, function($total, $roles) {
    // 每遇到含ROLE_ADMIN的用户数组,计数+1
    return $total + (in_array('ROLE_ADMIN', $roles) ? 1 : 0);
}, 0);

return $adminCount;

3. 数据库层面直接统计(性能最优)

如果你的用户量比较大,不建议查所有用户再统计,直接在数据库层面做计数会高效很多。用Doctrine的QueryBuilder可以这样写:

$adminCount = $this->entityManager->createQueryBuilder()
    ->select('COUNT(u.id)')
    ->from(User::class, 'u')
    // 假设roles字段是JSON格式存储,用LIKE匹配包含ROLE_ADMIN的记录
    ->where('u.roles LIKE :role')
    ->setParameter('role', '%"ROLE_ADMIN"%')
    ->getQuery()
    ->getSingleScalarResult();

return $adminCount;

如果你的roles字段是用其他格式存储(比如逗号分隔字符串),只需要调整where条件的匹配规则就行。

内容的提问来源于stack exchange,提问作者xihoj6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:37:56