У меня есть такой массив:
$sports = array(
'Softball - Counties',
'Softball - Eastern',
'Softball - North Harbour',
'Softball - South',
'Softball - Western'
);
Я хотел бы найти самый длинный общий префикс строки. В этом случае это будет 'Softball - '
Я думаю, что буду следовать этому процессу
$i = 1;
// loop to the length of the first string
while ($i < strlen($sports[0]) {
// grab the left most part up to i in length
$match = substr($sports[0], 0, $i);
// loop through all the values in array, and compare if they match
foreach ($sports as $sport) {
if ($match != substr($sport, 0, $i) {
// didn't match, return the part that did match
return substr($sport, 0, $i-1);
}
} // foreach
// increase string length
$i++;
} // while
// if you got to here, then all of them must be identical
Вопросы
-
Есть ли встроенная функция или более простой способ сделать это?
-
Для моего 5-строчного массива, который, вероятно, прекрасен, но если бы я должен был делать несколько тысяч линейных массивов, было бы много накладных расходов, поэтому мне пришлось бы вычислять движение с моими начальными значениями
$i
, например$i
= на полпути строки, если это не удается, тогда$i/2
пока он не будет работать, а затем увеличивайте$i
на 1 до тех пор, пока мы не добьемся успеха. Так что мы делаем наименьшее количество сравнений, чтобы получить результат.
Существует ли уже формула/алгоритм для такого рода проблем?