Общие части строк

SeaGull

Junior Member
Общие части строк

Есть две строки:

$a="Qwerty1234567890";
$b="Qwerty123Qwerty456";

Как можно определить у них общую левую часть ("Qwerty123"), не прибегая к побуквенному перебору ?

Заранее спасибо.
 

Demiurg

Guest
Открывам мануал, далее раздел "String functions" и ищем нужную функцию.
 

SeaGull

Junior Member
Понятно.
У меня тоже есть тематический сайт, где я очень люблю эту формулировку на форумах :)

Но в мануале я не нашел ничего подходящего.
Отсилы strncasecmp(), но это был бы тот же перебор в цикле.
 

Demiurg

Guest
а как ты предлагаешь сравнивать строки без цикла ???
ps циклы в php и те циклы, которые внутри встренных функций - сильно отличаются по скорости.
 

.des.

Поставил пиво кому надо ;-)
Левые части легко :)))
PHP:
function _part($s,$s1){
$r=$s^$s1;
return substr($s,0,strlen($r)-strlen(ltrim($r,"\\0")));
}
ltrim можно считать циклом.. но я думаю если и это существенно, то это изврат :)

xor рулит :)
 

SeaGull

Junior Member
2 Demiurg:

Говоря про побуквенный перебор в цикле, я имел ввиду примерно такой вариант:

$i=0;
while (!strncasecmp($a, $b, $i+1)) {$result.=$a[$i++];}
echo $result;

Знаю что криво, потому и обратился за помощью.
 

.des.

Поставил пиво кому надо ;-)
SeaGull у меня почему то ощущение, что вариант с XOR будет быстрее всего.. нет больше я уверен.. там нет ни одной ресурсоемкой функции.
используй ее! а еще лучше заинлайнь.
 

SeaGull

Junior Member
2 .des.:

Спасибо огромное. Так и сделал.
Когда писал свой цикл, еще не видел твоего сообщения.
 
Сверху