我有 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
,但我不知道如何解决这种情况。
您的代码也将像下面这样工作:-
foreach ($Array as $name)
{
if (stristr($name,$Var1)!==false)
{
echo $name;
echo PHP_EOL;
}
}
您也可以使用 php strpos() 函数来实现此目的
foreach($Array as $name)
{
if ( strpos($name,$Var1)!==false)
{
echo $name;
echo PHP_EOL;
}
}
注意:- 在 Both 函数中,第一个参数是要在其中搜索子字符串的字符串。第二个参数是子字符串本身。
可以使用php的
strpos()
函数来判断字符串是否包含子字符串
$a = 'Sant';
foreach($Array as $name)
{
if (strpos($name, $a) !== false) {
echo $name;
}
}
你应该这样做。您可以使用
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;
}
}
如果你想“过滤”你的“数组”,我建议使用名为
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 循环的好处是不需要声明输出变量(除非您想要一个)。它执行相同的迭代操作。
代码更新:(演示)
var_export(
array_filter(
$Array,
fn($v) => str_contains($v, $Var1)
)
);