我有3个字符串,我想只得到相同的字符串,类似这样:
$Var1 = "Sant";
$Array[] = "Hello Santa Claus"; // Name_1
$Array[] = "Santa Claus"; // Name_2
我想得到他们两个,因为他们匹配“Sant”。
使用我的代码我只能获得Name_2
$len = strlen($Var1);
foreach($Array as $name)
{
if ( stristr($Var1, substr($name, 0, $len)))
{
echo $name;
}
}
我理解为什么我只得到Name_2
,但我不知道如何解决这种情况。
答案 0 :(得分:3)
您可以使用php的strpos()
函数来识别字符串是否包含子字符串
$a = 'Sant';
foreach($Array as $name)
{
if (strpos($name, $a) !== false) {
echo $name;
}
}
答案 1 :(得分:3)
您的代码也会如下所示: -
foreach ($Array as $name)
{
if (stristr($name,$Var1)!==false)
{
echo $name;
echo PHP_EOL;
}
}
输出: - https://eval.in/812376
您也可以将php strpos() function用于此目的
foreach($Array as $name)
{
if ( strpos($name,$Var1)!==false)
{
echo $name;
echo PHP_EOL;
}
}
输出: - https://eval.in/812371
注意: - 在两个函数中,第一个参数是您要在其中搜索子字符串的字符串。第二个参数是子串本身。
答案 2 :(得分:3)
你应该这样做。你可以使用stristr
但是你必须翻转参数,因为你传递了错误的参数。第一个参数应为haystack
,第二个参数应为needle
。
ini_set('display_errors', 1);
$Var1 = "Sant";
$Array[] = "Hello Santa Claus"; // Name_1
$Array[] = "Santa Claus"; // Name_2
foreach ($Array as $name)
{
if (stristr($name,$Var1)!==false)
{
echo $name;
echo PHP_EOL;
}
}
答案 3 :(得分:1)
如果你想"过滤"你的"数组",我建议使用名为array_filter()
的php函数,如下所示:
代码:
$Var1 = "Sant";
$Array=["Hello Santa Claus","Easter Bunny","Santa Claus"];
var_export(array_filter($Array,function($v)use($Var1){return strpos($v,$Var1)!==false;}));
输出:
array (
0 => 'Hello Santa Claus',
2 => 'Santa Claus',
)
array_filter()
需要数组作为第一个参数,搜索术语需要use()
。返回部分告诉函数在true
时保留元素,如果false
则删除元素。
这个函数在foreach循环中的好处是不需要声明输出变量(除非你想要一个)。它执行相同的迭代操作。