добрый день, помогите плиз с сортировкой, что то туплю и никак не могу решить задачу, есть выборка атрибутов конкретных товаров у которых есть одинаковые и разные значение атрибутов, нужно отсортировать что бы остались только одинаковые, то есть к примеру 2 товара вот с такими атрибутами Спойлер Код: Array ( [0] => Array ( [attribute_id] => 49 [name] => Код Viega [text] => 746827 ) [1] => Array ( [attribute_id] => 40 [name] => Ду, дюйм [text] => 1/2 ) [2] => Array ( [attribute_id] => 21 [name] => Материал корпуса [text] => Бронза кремниевая ) [3] => Array ( [attribute_id] => 23 [name] => Материал шара [text] => Сталь нержавеющая ) [4] => Array ( [attribute_id] => 13 [name] => Применение [text] => Водоснабжение, теплоснабжение ) [5] => Array ( [attribute_id] => 15 [name] => Присоединение [text] => Резьба ) ) Array ( [0] => Array ( [attribute_id] => 49 [name] => Код Viega [text] => 746829 ) [1] => Array ( [attribute_id] => 40 [name] => Ду, дюйм [text] => 3/4 ) [2] => Array ( [attribute_id] => 21 [name] => Материал корпуса [text] => Бронза кремниевая ) [3] => Array ( [attribute_id] => 23 [name] => Материал шара [text] => Сталь нержавеющая ) [4] => Array ( [attribute_id] => 13 [name] => Применение [text] => Водоснабжение, теплоснабжение ) [5] => Array ( [attribute_id] => 15 [name] => Присоединение [text] => Резьба ) ) на выходе должны получить массив Спойлер Код: Array ( [0] => Array ( [attribute_id] => 21 [name] => Материал корпуса [text] => Бронза кремниевая ) [1] => Array ( [attribute_id] => 23 [name] => Материал шара [text] => Сталь нержавеющая ) [2] => Array ( [attribute_id] => 13 [name] => Применение [text] => Водоснабжение, теплоснабжение ) [3] => Array ( [attribute_id] => 15 [name] => Присоединение [text] => Резьба ) ) спасибо
Если данных немного, то просто сделайте массив, в который добавляйте атрибуты поочередно из массивов и проверяйте, что если было раньше, то увеличивайте счетчик у соответствующего элемента, а затем делайте выборку только с количеством больше 1 (не особо оптимально, зато понятно). Иначе открываете Кнут (Большая книга с алгоритмами).
пробовал типа такого, есть группы у которых много товаров и куча атрибутов, начинаются тормоза да и костыльно все как то получается (
А чего не переложить на БД? Там многие алгоритмы уже в нормальном виде. Т.е. делать выборку по совпадению.
Можно еще иной подход. Сортируете данные по id (или выборка с сортиовкой из БД). Затем делаете два указателя. И начинаете двигать по обоим массивам сверху вниз от меньшего id к большему. Если происходит пересечение элемента, то добавляете в результат. Такой алгортим даст производительность O(n) (без учета сортировки, но если из БД тягать, то там быстрые алгоритмы). Движение при этом по шагу. Чей id меньше тот и сдвигаете дальше.