меня огорчает:
1) отсутствие описания что делает эта функция
2) странный код для определения равенства слов
3) использование флага this_group
не силен в пхп, но переписал чуть чуть получше:
// hash as sorted chars of word
// i.e. 'ababcad' -> 'aabbcd'
function word_hash($word) {
$chars = str_split($word);
sort($chars);
return implode($chars);
}
// return grouped by word_hash array of words
function get_words_grouped_by_chars($words) {
$hashes = [];
$group_of_words = [];
foreach($words as $key => $value) {
if (!is_string($value))
throw new \InvalidArgumentException('Массив может содержать только строки.');
$hash = word_hash($value);
if (!array_key_exists($hash, $hashes)) {
$hashes[$hash] = $value;
$group_of_words[$hashes[$hash]] = [];
}
array_push($group_of_words[$hashes[$hash]], $value);
}
uksort($group_of_words, function($a, $b) { return strlen($b) - strlen($a); });
return array_values($group_of_words);
}
сложность - O(N) линейная, так как используется только один цикл. НО! если есть необходимость оценить сложность прям совсем упоровшись (вместе с array_push, uksort и прочим) - то сложность по самому сложному элементу (uksort) скорее всего O(N logN), нужно смотреть документацию