@oldzas

Как удалить из массива все однокоренные слова?

Как удалить из массива все однокоренные слова, оставив по одному элементу из таких похожестей?

Пример массива:

[47] => панель
[48] => пенал
[49] => перелив
[50] => подвесная
[51] => подвесного
[52] => подвесное
[53] => подвесной

Видим, что одинаковый корень у следующих элементов:

[50] => подвесная
[51] => подвесного
[52] => подвесное
[53] => подвесной

Надо оставить в массиве только первый такой элемент, остальные удалить.

Спасибо.
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
usdglander
@usdglander Куратор тега PHP
Yippee ki-yay
function clearBySixFirstLetter($array) 
{
    $has = [];
    
    return array_filter(
        $array,
        function ($word) use (&$has) {
            $sixLetters = mb_substr($word, 0, 6);
            
            if (!in_array($sixLetters, $has)) {
                array_push($has, $sixLetters);
                return true;
            }
            
            return false;
        }
    );
}

clearBySixFirstLetter([
    'панель',
    'пенал',
    'перелив',
    'подвесная',
    'подвесного',
    'подвесное',
    'подвесной',   
]);

/*
Array
(
    [0] => панель
    [1] => пенал
    [2] => перелив
    [3] => подвесная
)
*/
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
samodum
@samodum
Вообще-то, корень в этих словах "вес".
Школьная программа.
Переделай вопрос
Ответ написан
Delgus
@Delgus
Для новичка можно и так
sandbox.onlinephpfunctions.com/code/0ef20bd838b390...
$array = [
                47 => 'панель',
                48 => 'пенал',
                49 => 'перелив',
                50 => 'подвесная',
                51 => 'подвесного',
                52 => 'подвесное',
                53 => 'подвесной'
            ];

            $new_array = [];
            foreach ($array as $key => $value) {
                $new_key = mb_substr($value, 0, 6);
                if (!isset($new_array[$new_key])) {
                    $new_array[$new_key] = $value;
                }
            }
            $result = array_values($new_array);
            var_dump($result);

Вообще много способов
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 55 000 до 80 000 руб.
WACDAQ Москва
от 120 000 руб.
HTML Academy Санкт-Петербург
от 110 000 до 130 000 руб.
22 авг. 2019, в 12:43
3000 руб./за проект
22 авг. 2019, в 11:45
1000 руб./за проект
22 авг. 2019, в 11:33
250000 руб./за проект