如何在数组中查找包含给定子字符串的元素?

时间:2017-06-06 05:54:27

标签: php arrays filter substring

我有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,但我不知道如何解决这种情况。

4 个答案:

答案 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

Try this code snippet here

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循环中的好处是不需要声明输出变量(除非你想要一个)。它执行相同的迭代操作。