PHP:尝试在两个单独的字符串数组中查找公共匹配文本。主要思想:为论坛创建用户组

PHP:尝试在两个单独的字符串数组中查找公共匹配文本。主要思想:为论坛创建用户组,php,string,loops,find,match,Php,String,Loops,Find,Match,简短的描述是,我创建了自己的论坛。一切都非常棒,我自己也对它印象深刻,因为我只学了6个月的PHP。但是,我正在努力使用户组正常工作。现在,我可以为一个论坛类别分配一个用户组,这一切都非常棒。但同样,我只能在论坛中添加一个组。如果我尝试添加更多的组,这就是我的代码遇到问题的地方 首先,让我给你我正在使用的工作代码: function checkgroupstat($group, $user) { $findme = $group . ":"; $filestring = get_user_data

简短的描述是,我创建了自己的论坛。一切都非常棒,我自己也对它印象深刻,因为我只学了6个月的PHP。但是,我正在努力使用户组正常工作。现在,我可以为一个论坛类别分配一个用户组,这一切都非常棒。但同样,我只能在论坛中添加一个组。如果我尝试添加更多的组,这就是我的代码遇到问题的地方

首先,让我给你我正在使用的工作代码:

function checkgroupstat($group, $user) {
$findme = $group . ":";
$filestring = get_user_data($user, "groups");
$pos = strpos($filestring, $findme);
if ($pos === false) {
return "false";
} else {
return "true";
}
}
正如您所知,“获取用户数据()函数将返回用户所属的一组组。例如,它将返回5:1;6:1;7:1等。重要的部分是冒号前的数字和冒号本身,例如:5:,但不是5:1。该部分表示用户拥有的特权,并且是另一个编码页的一部分,因此在这里不重要

“groups”字符串将返回分配给论坛的组。上面的代码工作正常。如果返回true,论坛将可见,否则返回false

然而,我试图让它可以有一个以上的小组分配给论坛,我使用了这个代码,但它没有按预期工作:

function checkgroupstat($group, $user) {
$groups = explode(',', $group);
$filestring = get_user_data($user, "groups");

for ($i = 0; $i < count($groups); ++$i) {
$findme = $groups[$i] . ":";
$pos = strpos($filestring, $findme);
if ($pos === false) {
$false = "true";
}
else {
$truth = "true";
}
}
if ($truth == "true") {
return "true";
}
if ($truth == "") {

return "false";
}
}
函数checkgroupstat($group,$user){
$groups=分解(“,”,$group);
$filestring=获取用户数据($user,“groups”);
对于($i=0;$i<计数($groups);++$i){
$findme=$groups[$i]。“:”;
$pos=strpos($filestring,$findme);
如果($pos==false){
$false=“true”;
}
否则{
$truth=“true”;
}
}
如果($truth==“true”){
返回“真”;
}
如果($truth==“”){
返回“false”;
}
}
我甚至试着在每个循环中使用break

有什么建议吗


编辑:

以下建议无效。请参阅我的最新回复:
传递给checkgroupstat的参数是:(“1,2,3”,6)。从get_user_data()返回的结果是5:1;6:1;7:1;8:1;。顺便说一句,这两个参数对我都不起作用。

您在尝试以下操作吗?;)

函数checkgroupstat($group,$user){
$groups=分解(“,”,$group);
$filestring=获取用户数据($user,“groups”);
//迭代组数组
//如果组已匹配,则返回true
对于($i=0;$i
Hmmmm….请给我checkgroupstat()传递的参数和get\u user\u data()返回字符串。我将编写正确的代码

从现在开始,我只写下:

function checkgroupstat($group, $user) {
$aUserGroups = get_user_data($user, "groups");
$aGroups = explode(',',$aUserGroups);
foreach($aGroups as $sGroup) {
    list($iGroup,$iSomething) = explode(':',$sGroup);
    if($group==$iGroup) {
        return true;
    }
}
return false;
}


请-如果工作正常,请给我反馈:)

请正确缩进源代码。您的代码还有另一个问题:对于两位数的组,它不能正常工作。如果用户在组21中,则对于组1,它将返回true,因为它只在字符串中搜索
1:
。没有想到这一点。也许我可以在引号中添加一个空格。传递给checkgroupstat的参数是:(“1,2,3”,6)。从get_user_data()返回的结果是5:1;6:1;7:1;8:1;。顺便说一句,这两个参数对我都不起作用。我添加了一个var_转储代码:echo“filestring:”.var_dump($filestring)。“
“echo”组:“.var_dump($groups)。”
“echo”用户:“.var_dump($u会话['user\u id')”。
"; 这就是它返回的内容:string(29)“5:1;6:1;2:1;3:1;4:1;1:1;”filestring:array(1){[0]=>string(0)””}group:string(1)“6”用户:您提供的代码。它似乎不返回真或假。因此,它无法检测用户是否在正确的用户组中。请尝试我的更新。我现在返回字符串->“真”、“假”。这似乎是您在示例中所期望的。是的,我已经想到了,但我还是复制了您的代码。不起作用。我试着用你在另一个答案的评论中发布的参数->它返回“false”。正如所料。使用$groups=“1,2,6”进行尝试,结果返回“true”。正如所料。您的问题一定在代码的另一部分。但是我测试了其他代码,它似乎返回了正确的结果。我尝试在测试页面上使用它,在函数之外使用它,但仍然使用其余的站点代码,并且它工作正常。但是在一个函数中调用它并不能。而且,我的原始代码也起了作用。一切都很好。它似乎不能正确地返回真或假。
function checkgroupstat($group, $user) {
$aUserGroups = get_user_data($user, "groups");
$aGroups = explode(',',$aUserGroups);
foreach($aGroups as $sGroup) {
    list($iGroup,$iSomething) = explode(':',$sGroup);
    if($group==$iGroup) {
        return true;
    }
}
return false;