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

问题描述 投票:0回答:4

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

php arrays filter substring
4个回答
3
投票

您的代码也将像下面这样工作:-

foreach ($Array as $name)
{
    if (stristr($name,$Var1)!==false)
    {
        echo $name;
        echo PHP_EOL;
    }
}

输出:- https://eval.in/812376

您也可以使用 php strpos() 函数来实现此目的

foreach($Array as $name) 
{
   if (  strpos($name,$Var1)!==false)
   {
     echo $name;
     echo PHP_EOL;
   }
}

输出:-https://eval.in/812371

注意:- 在 Both 函数中,第一个参数是要在其中搜索子字符串的字符串。第二个参数是子字符串本身。


3
投票

可以使用php的

strpos()
函数来判断字符串是否包含子字符串

$a = 'Sant';
foreach($Array as $name) 
{
    if (strpos($name, $a) !== false) {
        echo $name;
    }
}

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;
    }
}

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

代码更新:(演示

var_export(
    array_filter(
        $Array,
        fn($v) => str_contains($v, $Var1)
    )
);
© www.soinside.com 2019 - 2024. All rights reserved.