Я бы выбрал способ регулярного выражения.
Я провел небольшой тест на строке из 320 слов с функцией Вейном и регулярным выражением
function preg( $txt ) {
return !preg_match( '/\b(\w+)\b.*?\1/', $txt );
}
Вот тест
$time['preg'] = microtime( true );
for( $i = 0; $i < 1000; $i++ ) {
preg( $txt );
}
$time['preg'] = microtime( true ) - $time['preg'];
$time['veynom-thewickedflea'] = microtime( true );
for( $i = 0; $i < 1000; $i++ ) {
single_use_of_words( $txt );
}
$time['veynom-thewickedflea'] = microtime( true ) - $time['veynom-thewickedflea'];
print_r( $time );
И вот результат, который я получил
Array
(
[preg] => 0.197616815567
[veynom-thewickedflea] => 0.487532138824
)
Это говорит о том, что решение RegExp, а также более лаконичное решение, более чем в два раза быстрее. (для строки из 320 слов и 1000 итераций)
Когда я запускаю тест на 10 000 итераций, я получаю
Array
(
[preg] => 1.51235699654
[veynom-thewickedflea] => 4.99487900734
)
Решение, отличное от RegExp, также использует намного больше памяти.
Итак ... Регулярные выражения для меня, потому что у них есть полный бак газа
EDIT
Текст, который я проверял, содержит повторяющиеся слова. Если этого не произойдет, результаты могут отличаться. Я опубликую другой набор результатов.
Обновление
При удалении дубликатов (теперь 186 слов) результаты для 1000 итераций:
Array
(
[preg] => 0.235826015472
[veynom-thewickedflea] => 0.2528860569
)
О вечера