PHP сравнить строку для дублирования - PullRequest
1 голос
/ 18 июля 2011

У меня есть такой массив:

   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"
   }

Qeuration

Каков наилучший способ найти разницу строк?

Я имею в виду, чтобы проверить, есть ли какие-либо дубликаты.

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. повторяется дважды.

, поэтому идея состоит в том, чтобы сравнить строку с другой, найти что-то, что дублируется, и поместить его в массив ... вот и все, что мне нужно:)

Я не говорю, что это возможно, но было бы неплохо, если бы это было :) 1023 *

Ответы [ 3 ]

2 голосов
/ 18 июля 2011

Сообщество, не стесняйтесь оптимизировать код.Я быстро это написал.

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)
0 голосов
/ 18 июля 2011

Я думаю, что вы, вероятно, захотите взглянуть на структуру данных дерева суффиксов. Взгляните на этот пост для некоторых идей:

Быстрый поиск строки с суффиксными деревьями

0 голосов
/ 18 июля 2011

Следующая ссылка должна помочь с этим: http://www.rogerethomas.com/b/14/php-search-string-for

Вам просто нужно изменить вывод else, чтобы добавить его в массив и добавить туда цикл while, если вы повторяете несколько записей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...