CrewCut
@CrewCut
Коплю силы на переезд в тропики

Как удалить неявные дубли в массиве php?

Есть массив строк, часть из которых может быть неявными дублями друг друга, например : "осиновый лист" и "лист осиновый". Т.е. те же слова, но в другом порядке. Задача убрать такие неявные дубли. Сейчас я как думаю сделать:

1. Создать ассоциированный массив, где будет "строка" => "строка, где слова отсортированы по алфавиту"
2. Убрать дубли по значениям ассоциированного массива
3. Создать простой массив из ключей очищенного массива.

Собственно, два вопроса - можно ли это сделать проще? Если нет - то как убрать в ассоциированном массиве дубли по ключу/значению? Знаю только array_unique, но она не подходит для этого.
  • Вопрос задан
  • 656 просмотров
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
$strings = ['лист осиновый', 'осиновый лист'];

$result = array_unique(array_map(function($str) {
    $arr = mb_split('\s', $word);
    sort($arr);

    return implode(' ', $arr);
}, $strings));


но это не финальный вариант конечно так как меняется порядок слов.
Ответ написан
Комментировать
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
<?php

    $arr = ["осиновый лист", "лист осиновый"];

    print_r(
        array_combine(array_map(function($val){
            $val = str_split($val);
            sort($val);
            return implode($val);
        },$arr),$arr)
    );


или то, что посоветовал Сергей

<?php

    $arr = ["осиновый лист", "лист осиновый"];

    print_r(
        array_combine(array_map(function($val) {
            $val = mb_split('\s', $val);
            sort($val);
            return implode(' ',$val);
        }, $arr), $arr)
    );
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы