【问题标题】:Compare a string and a php array and only show the matches比较一个字符串和一个 php 数组,只显示匹配项
【发布时间】:2021-05-19 23:29:07
【问题描述】:

我有一个如下所示的字符串:

"illustration,drawing,printing"

我有一个如下所示的数组:

Array (
    [0] => illustration
    [1] => drawing
    [2] => painting
    [3] => ceramics
)

如何比较两者,只显示字符串和数组中同时存在的项?

所以在上面的例子中,我想输出如下所示的内容:

技能:插图、绘画

谢谢!

【问题讨论】:

    标签: php arrays string


    【解决方案1】:

    你可以这样做:

    功能:

        function functionName($string, $array){
            $skills = '';
            // Create a temp array from your string breaking appart from the commas
            $temparr = explode(",", $string);
            // Iterate through each of the words now
            foreach($temparr as $str){
                // Check to see if our current string is in the array provided
                if(in_array($str, $array)){
                    // If it is, then add it to the string "skills"
                    $skills .= "${str}, ";
                }
            }
            // Cut the last space and comma off the end of the str.
            $skills = substr($skills, 0, strlen($skills) - 2);
            // Return our results
            return 'SKILLS: '.$skills;
        }
    

    用法:

        $string = "illustration,drawing,printing";
     
        $array = Array (
            0 => "illustration",
            1 => "drawing",
            2 => "painting",
            3 => "ceramics"
        );
        // Just input our string and the array we want to search through
        echo(functionName($string, $array));
    

    现场演示:

    https://ideone.com/qyqgzo http://sandbox.onlinephpfunctions.com/code/65dc988370ad8ce61ab5ccbc232af4bcf8bd3d42

    【讨论】:

    • 这成功了!我选择了其他选项作为我的答案,因为该选项与我现有的代码更无缝地协同工作。谢谢!
    【解决方案2】:

    使用explode()array_intersect()implode()

    <?php
    
    $string = "illustration,drawing,printing";
    
    $array = Array (
        0 => 'illustration',
        1 => 'drawing',
        2 => 'painting',
        3 => 'ceramics'
    );
    
    $stringArray = explode(',',$string);
    
    $common = array_intersect($stringArray,$array);
    
    echo "Skills :".implode(',',$common);
    

    https://3v4l.org/StqYN

    【讨论】:

    • 两个答案都有效,但这似乎是最简单的实现,对我来说更容易理解。谢谢!
    • 哈哈 Nicee,当它绝对是最简单的路线时,我什至没有考虑数组相交:P
    【解决方案3】:

    您可以替换逗号 , 并将字符串单词加入 OR | 并使用 grep 查找它们。这将匹配每个数组元素中任意位置的单词:

    $result = preg_grep("/".str_replace(",", "|", $string)."/", $array);
    

    如果您只想要完全匹配,那么:"/^(".str_replace(",", "|", $string).")$/"

    【讨论】:

      【解决方案4】:

      首先将该字符串转换为数组。

      使用array_intersect();

      $str = "illustration,drawing,printing";
       
       $ar1 = explode(",",$str);
      
      print_r ($ar1);
      
      $ar2 = Array ("illustration","drawing","painting","ceramics"); 
      
      echo "<br>";
       print_r ($ar2);
      
      
      $result = array_intersect($ar1, $ar2);
      
      
      echo "Skills :".implode(',',$result);
      

      输出:

      Array ( 
        [0] => illustration 
        [1] => drawing 
        [2] => printing 
      )
      
      Array ( 
        [0] => illustration 
        [1] => drawing 
        [2] => painting 
        [3] => ceramics 
      )
      
      SKILLS: illustration, drawing
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-11
        • 2013-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多