【问题标题】:PHP compare string for duplicatationPHP比较字符串是否重复
【发布时间】:2011-10-07 20:24:08
【问题描述】:

我有一个这样的数组:

   array{
    [39] => src="http://www.google.com/jsapi">
    [111] => src="http://www.example.com/wp-content/themes/code.js"
    [55] => src="http://www.example.com/wp-content/themes/yui.js"
    [1015] => src="wp-content/uploads/website.jpg"
   }

疑问

找出字符串差异的最佳方法是什么?

我的意思是检查是否有任何重复。

src="http://www.example.com/wp-content/themes/ 重复两次。

所以如果我有一个这样的数组:

array{
    [39] => src="http://www.google.com/jsapi">
    [55] => src="http://www.example.com/wp-content/themes/yui.js"
    [1015] => src="wp-content/uploads/website.jpg"
   }

http://www. 重复两次。

所以想法是将字符串与另一个字符串进行比较,然后找到重复的内容并将其推送到数组中......这就是我所需要的:)

我不是说有可能,但如果有可能就好了:)

【问题讨论】:

  • 你能澄清一点你需要什么。您是否尝试过使用正则表达式?您可以匹配重复项并将它们选择为组以便以后处理它们...
  • 你只是从头开始匹配吗?
  • 所以你想确定唯一的字符串前缀? strncmp?
  • @mellamokb 可能并非总是如此,[如果在第二个阵列上] google 有安全的 https:,那么结果将是 ://www. 是重复的 :)
  • jsjsapiyui.js 中重复怎么办?

标签: php arrays replace


【解决方案1】:

我想你可能想看看后缀树数据结构。看看这篇文章以获得一些想法:

Fast String Search With Suffix Trees

【讨论】:

    【解决方案2】:

    社区,请随意优化代码。我很快就写出来了。

    function findStrDuplicate($str1, $str2)
    {
        $duplicate = '';
        for($i = 0; $i < min(strlen($str1), strlen($str2)); $i++) {
            if($str1[$i] != $str2[$i]) {
                break;
            }
            $duplicate .= $str1[$i];
        }
    
        return $duplicate;
    }
    
    function findArrayPrefixDuplicate($array)
    {
        $duplicatesArray = array();
    
        for($i = 0; $i < count($array) - 1; $i++) {
            for($j = $i+1; $j < count($array); $j++) {
                $dup = findStrDuplicate($array[$i], $array[$j]);
                if(!empty($dup)) {
                    $duplicatesArray[] = $dup;
                }
            }
        }
    
        return array_unique($duplicatesArray);
    }
    
    $data = array(
        'src="http://www.google.com/jsapi"',
        'src="http://www.example.com/wp-content/themes/code.js"',
        'src="http://www.example.com/wp-content/themes/yui.js"',
        'src="wp-content/uploads/website.jpg"'
    );
    
    // Remove src="..."
    
    $data = array_map(function ($val) {
        return substr($val, 5, strlen($val) - 1);
    }, $data);
    
    $result = findArrayPrefixDuplicate($data);
    
    var_dump($result);
    

    结果:

    array
      0 => string 'http://www.' (length=11)
      2 => string 'http://www.example.com/wp-content/themes/' (length=41)
    

    【讨论】:

    • 这比我想要的要多得多:)所以竖起大拇指:)谢谢你
    【解决方案3】:

    以下链接应该对此有所帮助:http://www.rogerethomas.com/b/14/php-search-string-for

    如果您要重复多个条目,您只需更改 else 输出以将其添加到数组中并在其中添加一个 while 循环

    【讨论】:

    • 如果我知道$x,那么问这个问题就没有任何意义了,因为我有大声笑,str_replace(); 会完成这项工作:)
    • 哦,你正在寻找差异,然后使用它来找到欺骗,抱歉造成混淆
    猜你喜欢
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2018-07-09
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多