2013-04-03 4 views
1

Мне интересно, есть ли простой способ, в PHP, сравнить две строки и вернуть количество символов, которые они имеют вместе с начала строки.PHP: Сравните начало двух строк

Пример:

$s1 = "helloworld"; 
$s1 = "hellojohn"; 

Эти две строки и начинаются с «Привет», что означает, что обе строки имеют первые 5 символов в общем. «5» - это значение, которое я бы хотел получить при сравнении этих двух строк.

Есть ли вычислительно быстрый способ сделать это, не сравнивая обе строки как массивы друг с другом?

+1

Насколько мне известно, я не думаю, что есть встроенная функция для чего-то подобного. Скорее всего, вам придется сделать свой собственный. –

ответ

4
function commonChars($s1, $s2) { 
    $IMAX = min(strlen($s1), strlen($s2)); 
    for($i = 0; $i < $IMAX; $i++) 
     if($s2[i] != $s1[i]) break; 
    return $i; 
} 
+0

Это отредактировано ;-) –

+1

Перед циклом вы должны предварительно компилировать 'min (strlen ($ s1), strlen ($ s2))', поэтому он не пересматривается на ** каждую ** итерацию. –

+0

Спасибо, Джофрамбах, ты совершенно прав. это исправлено. –

0

Насколько мне известно, я не думаю, что есть встроенная функция для чего-то подобного. Скорее всего, вам придется сделать свой собственный.

Не должно быть слишком сложно. Просто зациклируйте обе строки индексом по индексу, пока не найдете совпадение, которое не соответствует. Как далеко вы получили, так это ответ.

Надеюсь, что это поможет!

1

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

function compareSection($start, $end, $string1, $string2) { 
    $substr1 = substr($string1, $start, $end-$start); 
    $substr2 = substr($string2, $start, $end-$start); 
    if ($substr1 == $substr2) return $end; 
    if ($firstMatches = compareSection(0, $end/2, $substr1, $substr2)) { 
    return $start + $firstMatches; 
    if ($lastMatches = compareSection($end/2, $end, $substr, $substr2)) { 
    return $start+$lastMatches; 
    } 
} 
1

Если это сходство строк, которые вы хотите получить, а не только фактическое количество одинаковых символов, есть две функции для этого: strcmp и levenshtein. Возможно, они соответствуют вашей цели больше, чем вы просили в этом вопросе.

+1

Скорее всего, это то, чего они на самом деле хотят. –

0

Существует функция, которая вернется, для которой вы ищете.

check this link. Надеюсь, это будет полезно для вас.

Также см. this link есть функция предварительной сборки PHP. Вторая ссылка не связана с вопросом, но надежда будет полезна.

Смежные вопросы