Сортировка массива php по одинаковым буквам
На входе есть одномерный массив вида [‘asd’,’qwe’,’sda’,’wqe’,’dsa’,’qwer’,’afds’,’zxc’]
Требуется массив сгруппировать по группам слов состоящих из одних и тех же букв.
Пример правильного ответа:
[
[‘asd’,’sda’,’dsa’],
[‘qwe’,’wqe’],
[‘qwer’],
[‘afds],
[‘zxc’]
]
Ответы (1 шт):
Автор решения: Jean-Claude
→ Ссылка
Навеяно этим ответом
//создать отсортированный по алфавиту уникальный хеш строки
function AlphabetSoup($string) {
$letters_array = str_split($string, 1);
sort($letters_array);
return join('', $letters_array);
}
//дата
$data = ['asd', 'qwe', 'sda', 'wqe', 'dsa', 'qwer', 'afds', 'zxc'];
$new_array = [];
//перегонка
foreach ($data as $item) {
//получить уникальный хеш строки
$key = AlphabetSoup($item);
//пнуть значение в свой отсек
$new_array[$key][] = $item;
}
//чикнуть хеш-ключи
$new_array = array_values($new_array);
//array (size=5)
// 0 =>
// array (size=3)
// 0 => string 'asd' (length=3)
// 1 => string 'sda' (length=3)
// 2 => string 'dsa' (length=3)
// 1 =>
// array (size=2)
// 0 => string 'qwe' (length=3)
// 1 => string 'wqe' (length=3)
// 2 =>
// array (size=1)
// 0 => string 'qwer' (length=4)
// 3 =>
// array (size=1)
// 0 => string 'afds' (length=4)
// 4 =>
// array (size=1)
// 0 => string 'zxc' (length=3)