【问题标题】:Find strings inside array using PHP使用 PHP 在数组中查找字符串
【发布时间】:2012-12-19 08:53:57
【问题描述】:

我有 2 个数组,我希望使用 PHP 在其中 1 个数组中找到一个值。

我意识到我必须使用 PHP explode 函数,但恐怕我的技能到此为止。

我的函数将比较两个数组的值,如果它在$haystack 中找到任何$needle 值,它将在$found 中返回它们。它可能会找到多个,所以$found 也应该是一个数组?

$needle = "Swimming,Landscaping,Gardening,Bricklaying,3D Modelling";
$haystack = "Football,Rugby,Landscaping,3D Modelling";
$found = magicFunction($needle,$haystick); 
// $found['0'] = "Landscaping";
// $found['1'] = "3D Modelling";

这有意义吗?

非常感谢您对此的任何指点。

【问题讨论】:

    标签: php arrays string explode implode


    【解决方案1】:

    PHP 提供了方便的函数 array_intersect 来做到这一点。

    $needle = "Swimming,Landscaping,Gardening,Bricklaying,3D Modelling";
    $haystack = "Football,Rugby,Landscaping,3D Modelling";
    
    $needle = explode(",", $needle);
    $haystack = explode(",", $haystack);
    
    $intersection = array_intersect($haystack, $needle);
    print_r($intersection);
    //Array ( [2] => Landscaping [3] => 3D Modelling )
    

    【讨论】:

    • 哦哦哦。我会看看这个。谢谢,大卫 :-)
    【解决方案2】:

    你可以这样做:

    $found = Array ();
    $needle = "Swimming,Landscaping,Gardening,Bricklaying,3D Modelling";
    $haystack = "Football,Rugby,Landscaping,3D Modelling";
    $search = explode(',',$haystack);
    foreach ( explode(',',$needle as $k => $v )
    {
      if ( in_array ( $v, $search ) )
        $found[] = $v;
    }
    

    或者正如大卫所说,你可以使用array_intersect

    $found = array_intersect ( explode( ',', $haystack ), explode( ',', $needle ) );
    

    【讨论】:

      【解决方案3】:

      你可以从 needle 和 haystack 中产生数组,然后找到两个数组的交集:

      <?php
      
      $needle = "Swimming,Landscaping,Gardening,Bricklaying,3D Modelling";
      $haystack = "Football,Rugby,Landscaping,3D Modelling";
      
      $needle = explode(',', $needle);
      $haystack = explode(',', $haystack);
      
      
      $found = array_intersect($needle, $haystack);
      
      print_r($found);
      ?>
      

      http://tr1.php.net/array_intersect

      【讨论】:

        【解决方案4】:

        您要查找的函数是 PHP 内置的:array_intersect

        $a = explode(',', "Swimming,Landscaping,Gardening,Bricklaying,3D Modelling");
        $b = explode(',', "Football,Rugby,Landscaping,3D Modelling");
        $found = array_intersect($a, $b); 
        print_r($found);
        

        输出: Array ( [1] => Landscaping [4] => 3D Modelling )

        【讨论】:

          【解决方案5】:

          最简单的方法可能是引爆针并使用strpos 查找事件。

          $needles = explode(',', $needle);
          foreach ($needles as $n)
          {
                if (strpos($n, $haystack)) {  }
          }
          

          如果你不需要字符串的位置,Jan Hančič的解决方案可能更合适更快。

          【讨论】:

            猜你喜欢
            • 2015-12-31
            • 1970-01-01
            • 2020-06-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-27
            相关资源
            最近更新 更多