【问题标题】:compare string variables with php用php比较字符串变量
【发布时间】:2013-09-17 10:06:01
【问题描述】:

我试图弄清楚如何解决以下问题

$str = 'asus company';
$brands = "asus|lenovo|dell";

我想比较两个字符串变量并检索匹配的子字符串。所需的输出是'asus'

我知道我可以使用 php 中的 strtr 函数,但这个函数只返回一个布尔值。我也需要字符串。

【问题讨论】:

  • 您的字符串格式是否始终相同?如果是这样,我建议您使用 ` ` 和 | 解析字符串并将其保留为数组。之后,您可以轻松地使用in_array() 来检查是否匹配。
  • 如果您总是使用相同的“|”,请参阅 Jari 的答案以获得快速和简单的方法单独的品牌列表。如果你想在字符串中找到匹配的模式,你可以使用后缀树。
  • 是的,品牌将采用相同的格式。我将尝试使用 Jaris 提示。
  • 我回复晚了,但是如果您认为 $str 可能包含逗号或其他内容,请查看我的解决方案 xD
  • 非常感谢@aleation。不错!

标签: php string compare


【解决方案1】:

假设$str 由空格分隔,$brands 由管道分隔,这应该可以:

<?php

$str = 'asus company';
$brands = "asus|lenovo|dell";

$array_str = explode(' ', $str);
$array_brands = explode('|', $brands);

var_dump(
    array_intersect($array_str, $array_brands)
);

输出是

array(1) {
  [0]=>
  string(4) "asus"
}

【讨论】:

    【解决方案2】:

    preg_match 将为您完成工作。请记住,您的正则表达式必须正确,这意味着在您的情况下,简单的 | 分隔符就足够了。

    $str = 'asus company'; 
    $brands = "asus|lenovo|dell"; 
    
    preg_match("/($brands)/", $str, $matches);
    
    echo $matches[1] ;
    

    $matches 包含关键字的出现。 $matches[0] 具有完整的字符串,$matches[1] 具有第一次出现,依此类推。

    【讨论】:

      【解决方案3】:

      这就是我要做的:

      $str = 'asus company';
      $brands = "asus|lenovo|dell";
      
      //Finding every single word (separated by spaces or symbols) and putting them into $words array;
      preg_match_all('/\b\w+\b/', $str, $words);
      
      //Setting up the REGEX pattern;
      $pattern = implode('|', $words[0]);
      $pattern = "/$pattern/i";
      
      //Converting brands to an array to search with
      $array = explode('|', $brands);
      
      //Searching 
      $matches = preg_grep($pattern, $array);
      

      你面临几个问题:如果字符串有逗号或其他符号,那么我们不能只使用explode来分隔,这就是我使用preg_match all来分隔它们并设置模式的原因。

      使用 preg_grep 可以避免大小写问题。


      你也可以array_intersect($words, $array) @Znarkus 回复,而不是设置模式和preg_grep(),但在转换为数组之前确保你strtolower() $brands$str,我不确定如果 array_intersect() 区分大小写。

      【讨论】:

        【解决方案4】:

        你可以像下面这样使用

        $array1 = explode(" ",$str);
        $array2 = explode("|",$brands);
        $result = array_intersect($array1, $array2);
        print_r($result);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-03
          • 1970-01-01
          • 2021-10-14
          • 1970-01-01
          • 2018-09-23
          • 2012-10-05
          相关资源
          最近更新 更多