我正在尝试使用此方法来查找两个字符串中的常用字符,即$ a和$ r,但第一个字符未打印。此外,$已经收集了常见字符,并防止它们被多次打印(我需要每个字符只打印一次),但它没有这样做。请告诉我我正在犯的错误。
<?php
$a="BNJUBCI CBDIDIBO";
$r="SBKJOJLBOU";
$already="";
for($i=0;$i<strlen($r);$i++)
{
if (stripos($a,$r[$i])!=FALSE)
{
if (stripos($already,$r[$i])==FALSE)
{
$already=$already.$r[$i];
echo "already=".$already."<br>";
echo $r[$i]."<br>";
}
}
}
?>
答案 0 :(得分:5)
使用!==FALSE
代替!=FALSE
。问题是如果针在大海捞针的开头,stripos
返回0,而0是假的。通过使用!==
,您强制它确保结果实际上是假的,而不仅仅是0。
这实际上列在docs中。这里可能适合使用“RTM”。
警告强>
此函数可能返回布尔值FALSE,但也可能返回非布尔值,其值为FALSE。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。
答案 1 :(得分:3)
在PHP中查找两个字符串的交集的最简单方法是将它们转换为数组并使用内置函数实现此目的。
以下内容将显示两个字符串之间的所有唯一和常用字符。
<?php
$a="BNJUBCI CBDIDIBO";
$r="SBKJOJLBOU";
$a_arr = str_split($a);
$r_arr = str_split($r);
$common = implode(array_unique(array_intersect($a_arr, $r_arr)));
echo "'$common'";
?>
答案 2 :(得分:1)
我认为一个更简单的解决方案是将字符串变成数组并比较那些没有?
类似的东西:
<?php
$a="BNJUBCI CBDIDIBO";
$r="SBKJOJLBOU";
$shared = implode( '' , array_intersect( str_split($a) , str_split($r) ) );
?>
这应该返回$ $中存在于$ r中的所有字符的字符串