$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, пока не добьемся успеха. Чтобы мы делали наименьшее количество сравнений для получения результата.
Существует ли уже формула/алгоритм где-нибудь с такой проблемой?
Я хотел бы найти самый длинный общий префикс строки. В данном случае это будет «Софтбол -».
Я думаю, что я бы последовал этому процессу
[code]$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 [/code]
Вопросы
[list] [*]Есть ли встроенная функция или гораздо проще как это сделать? [*]Для моего 5-строчного массива это, вероятно, нормально, но если бы я сделал несколько тысяч строковых массивов, было бы много накладные расходы, поэтому мне придется рассчитывать перемещение с моими начальными значениями $i, например, $i = половина строки, если это не удастся, то $i/2, пока это не сработает , затем увеличивайте $i на 1, пока не добьемся успеха. Чтобы мы делали наименьшее количество сравнений для получения результата. [/list]
Существует ли уже формула/алгоритм где-нибудь с такой проблемой?