【问题标题】:How to find elements in array that contain a given substring?如何在数组中查找包含给定子字符串的元素?
【发布时间】:2017-11-07 00:20:51
【问题描述】:

我有 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


    【解决方案1】:

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

    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

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

    【讨论】:

      【解决方案2】:

      您可以使用php的strpos()函数来识别字符串是否包含子字符串

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

      【讨论】:

        【解决方案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;
            }
        }
        

        【讨论】:

          【解决方案4】:

          如果您想“过滤”您的“数组”,我建议使用名为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 循环的好处是不需要声明输出变量(除非你想要一个)。它执行相同的迭代动作。

          【讨论】:

          • 我该如何处理?
          • @PaulNoris 你在问什么?如果您澄清您的要求,我很乐意为您提供帮助。
          • 我的意思是我想分开两个变量,数组的数量和值,因为我在不同的地方显示它............非常感谢@mickmackusa !!
          • @PaulNoris 你能告诉我你的代码吗(pastebin.com 链接或sandbox.onlinephpfunctions.com 链接)?如果我更好地理解“在不同的地方展示”是什么意思,我可以提供更准确的回复。 (我女儿今晚身体不适,所以我可能反应有点慢,但我会回复)
          • @PaulNoris 这让你有多接近? sandbox.onlinephpfunctions.com/code/…stripos()stristr() 快)
          猜你喜欢
          • 1970-01-01
          • 2021-12-18
          • 2016-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-08
          相关资源
          最近更新 更多