如何从数组中匹配字符串是否一致/存在

如题,用自己的想法尝试过,匹配不到

$Str = 'Players';

$CotentCate = 'UserOS|UserIP|UserLang|UserLocation|Players|JavaVersion|MCVersion|ServerCore|ServerSystem';

$content = trim($Str);
        $CotentArr = explode("|", $CotentCate);
        for ($i = 0; $i < count($CotentArr); $i++) {
            if ($CotentArr[$i] == "") {
                continue;  
            }
            if (strpos($content, trim($CotentArr[$i])) != false) {
                die('true');
            }
        }
        die('false');

目标返回 true

实际返回 false

阅读 2.6k
3 个回答

我觉得 雪之祈舞 的方法很好
不过对于你的代码,为什么匹配不到,我想原因在这里:

if (strpos($content, trim($CotentArr[$i])) != false)

这句判断有问题,!= 应该换成 !==
因为strpos函数用于查找字符串,如果查找到了则返回字符串出现的位置,当 CotentArr[$i] 的值是 Players 时,它在 $content 中出现的位置为0,经过 != 判断不会出现你期待的结果(!= 类型转换,出现的位置为0,则为false)

题外话:
不建议你在 for(表达式1;表达式2;表达式3) 中的 表达式2 中使用count函数,因为这3个表达式执行的顺序是:
表达式1 -> 表达式2 -> 表达式3 -> 表达式2 -> 表达式3 -> 表达式2.... 你使用的count函数会进行多次计算数组中的元素个数...,当然,PHP是很快的,你也可以不在乎

$rr = substr_count($CotentCate,$Str);
echo $rr;

无奈~~~没人用in_array()

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题