使用PHP(Discord.PHP)在雪花中循环

使用PHP(Discord.PHP)在雪花中循环,php,arrays,discord,snowflake-cloud-data-platform,Php,Arrays,Discord,Snowflake Cloud Data Platform,这是我的第一篇帖子,我在这里读了很多书,希望我能避免让自己尴尬。我在这个主题上做了很多搜索,结果很少,因为我对PHP还不太熟悉,而且这个主题的文档也很少 PHP的Discord API仅限于您可以请求的某些数据,我试图做的是:获取成员,检查他们有哪些角色,如果他们有,则计数他们 目前,使用API,您可以计算公会中的所有成员,但无法计算具有特定角色的公会中的所有成员。我的最终结论是在雪花中循环并自己处理比较 此代码为公会返回雪花(最多1000个): <?php $json_optio

这是我的第一篇帖子,我在这里读了很多书,希望我能避免让自己尴尬。我在这个主题上做了很多搜索,结果很少,因为我对
PHP
还不太熟悉,而且这个主题的文档也很少

PHP
的Discord API仅限于您可以请求的某些数据,我试图做的是:获取成员,检查他们有哪些角色,如果他们有,则计数他们

目前,使用API,您可以计算公会中的所有成员,但无法计算具有特定角色的公会中的所有成员。我的最终结论是在雪花中循环并自己处理比较

此代码为公会返回雪花(最多1000个):

<?php
    $json_options = [
      "http" => [
        "method" => "GET",
        "header" => "Authorization: Bot TOKENREDACTED"
      ]
    ];    
    $json_context = stream_context_create($json_options); 
    $json_get     = file_get_contents('https://discordapp.com/api/guilds/GUILDIDREDACTED/members?limit=1000', false, $json_context);
    $json_decode  = json_decode($json_get, true);
    print_r($json_decode);
?>
正如您所看到的,雪花在数组方面相当复杂

我在这里试图做的是遍历每个数组条目(
[0]
[1]
[2]
等),然后循环到角色。如果
[user]
具有角色ID
1234567890121345678
(例如),则将该成员添加到要打印的计数中,如果没有匹配项,则只需忽略该成员并移动到下一个。但我真的不确定从哪里开始。非常感谢您提供的任何帮助或指导。

您可以使用并仅获取所需的元素,然后使用简单的
计数方法进行计数。考虑以下事项:

$arr = array_filter($json_decode, function($e) {return in_array("123456789012345678", $e['roles']);});
echo count($arr);
如果您的“RoleId”是动态的,您可以执行以下操作:

$myRole = "123456789012345678";
$arr = array_filter($json_decode, function($e) use ($myRole) {return in_array($myRole, $e['roles']);});
foreach($arr as $e) {echo $e['user']['username'];}
如果还想显示
用户名
,可以执行以下操作:

$myRole = "123456789012345678";
$arr = array_filter($json_decode, function($e) use ($myRole) {return in_array($myRole, $e['roles']);});
foreach($arr as $e) {echo $e['user']['username'];}
您可以使用并仅获取所需的元素,然后使用简单的
count
方法对其进行计数。考虑以下事项:

$arr = array_filter($json_decode, function($e) {return in_array("123456789012345678", $e['roles']);});
echo count($arr);
如果您的“RoleId”是动态的,您可以执行以下操作:

$myRole = "123456789012345678";
$arr = array_filter($json_decode, function($e) use ($myRole) {return in_array($myRole, $e['roles']);});
foreach($arr as $e) {echo $e['user']['username'];}
如果还想显示
用户名
,可以执行以下操作:

$myRole = "123456789012345678";
$arr = array_filter($json_decode, function($e) use ($myRole) {return in_array($myRole, $e['roles']);});
foreach($arr as $e) {echo $e['user']['username'];}

这可能是非常非常糟糕的做法,尤其是对于第一篇文章@韦斯利·默奇非常感谢你的指导,我现在知道了。另外,请随时回复,以便我可以标记您作为答案。下面是我想与大家分享的工作代码,以及对代码功能的以下解释:

<?php
$json_options = [
  "http" => [
    "method" => "GET",
    "header" => "Authorization: Bot Your-Discord-Bot-Token-Here"
  ]
];

$json_context = stream_context_create($json_options);

$json_get     = file_get_contents('https://discordapp.com/api/guilds/your-guild-id-here/members?limit=1000', false, $json_context);


print_r(substr_count ( $json_get ,'Role-Id-To-Look-For'));
?>


此代码将查询API中的雪花,然后将雪花转换为字符串,并统计雪花中包含该角色的出现次数。在这种情况下,我有12个人扮演这个角色,我可以确认它成功地返回了12的值。在这个用例中,不一定是解析数组的问题,我可以将雪花作为字符串来检查我要查找的ID。这个用例是有限的,因为它不一定会返回具有该角色的成员的任何详细信息,所以我不会说它完全涵盖了每个用例。

这可能是非常非常糟糕的做法,尤其是对于第一篇文章@韦斯利·默奇非常感谢你的指导,我现在知道了。另外,请随时回复,以便我可以标记您作为答案。下面是我想与大家分享的工作代码,以及对代码功能的以下解释:

<?php
$json_options = [
  "http" => [
    "method" => "GET",
    "header" => "Authorization: Bot Your-Discord-Bot-Token-Here"
  ]
];

$json_context = stream_context_create($json_options);

$json_get     = file_get_contents('https://discordapp.com/api/guilds/your-guild-id-here/members?limit=1000', false, $json_context);


print_r(substr_count ( $json_get ,'Role-Id-To-Look-For'));
?>


此代码将查询API中的雪花,然后将雪花转换为字符串,并统计雪花中包含该角色的出现次数。在这种情况下,我有12个人扮演这个角色,我可以确认它成功地返回了12的值。在这个用例中,不一定是解析数组的问题,我可以将雪花作为字符串来检查我要查找的ID。这个用例是有限的,因为它不一定会返回拥有该角色的成员的任何详细信息,所以我不会说它完全涵盖了每个用例。

foreach($json_decode as$member){…}
开始,您会在
$member['roles']
foreach开始找到角色ID($json_解码为$member){…}
您可以在
$member['roles']中找到角色ID
我也将尝试一下,感谢您的回复。一旦我根据自己的使用情况进行了调整,我很乐意将此标记为答案。无论如何,我认为您发布的这些信息对以后阅读此内容的其他人都很有用。您的解决方案更短、更健壮,因此我将此标记为答案,因为它确实有效。Th谢谢!嘿,德温德,我实际上有一个后续问题。有没有办法显示那些同时拥有这些角色的人的用户名?我也在尝试将其添加到我的网站中,但是我遇到的问题是比较[用户名]和[角色]关键点。请注意,这里不是要一个勺子,只是想知道如何在成功的匹配中获得其他对象。我也要尝试一下,谢谢你的回复。我很乐意在根据我的使用情况调整后将此标记为答案。不管怎样,我认为你发布的这些信息对其他人都有用你的解决方案更短、更健壮,所以我将把它标记为答案,因为它确实起作用了。谢谢!嘿,德温德,我实际上有一个关于这个问题的后续问题。有没有办法显示那些也有这些角色的人的用户名?我也在尝试将它添加到我的网站上,不过我遇到的问题是c比较[username]和[roles]键。另外,这里不需要勺子,只需要询问如何在成功匹配中获取其他对象。