Вы можете перебирать список, отсортированный по длинам фраз в обратном порядке, и добавлять каждую возможную подфразу в набор, чтобы можно было использовать этот набор, чтобы проверить, является ли текущая фраза подфраза предыдущая, более длинная фраза:
output = []
seen = set()
for phrase in sorted(l, key=len, reverse=True):
words = tuple(phrase.split())
if words not in seen:
output.append(phrase)
seen.update({words[i: i + n + 1] for n in range(len(words)) for i in range(len(words) - n)})
так, что дано:
l = ['love', 'hair', 'light', 'hair dryer', 'bright light', 'bright hair dryer']
output
становится:
['bright hair dryer', 'bright light', 'love']
$foo = array_values($foo);
перенумерует массив для Вас
Вместо того, чтобы использовать для циклов это кажется, что необходимо использовать циклы foreach. По-видимому, Вы не заботитесь об индексах так или иначе, так как Вы перенумеровываете их.
Этот цикл:
for ($i = 0; $i < $loopSize; $i++)
{
process($myArray[$i]);
}
превращается
foreach($myArray as $key=> $value)
{
process($value);
/** or process($myArray[$key]); */
}
or even more simply
foreach($myArray as $value)
{
process($value);
}