За последние 24 часа нас посетили 22766 программистов и 1226 роботов. Сейчас ищут 764 программиста ...

Сортировка массива путем удаления повторов

Тема в разделе "PHP для новичков", создана пользователем ainur777, 29 окт 2018.

Метки:
  1. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    Всем привет! Кто сталкивался с сортировкой массива путем удаления повторов.
    Есть массив:
    PHP:
    1. $array1 = [
    2.   ["name1"=>"Ars","name2"=>"Ar","name3"=>"Ap"],
    3.   ["name1"=>"Ars1","name2"=>"Ar","name3"=>"Ap"],
    4.   ["name1"=>"Ars1","name2"=>"Ar","name3"=>"Ap"],
    5.   ["name1"=>"Ars2","name2"=>"Ar","name3"=>"Ap"],
    6.   ["name1"=>"Ars","name2"=>"Ar","name3"=>"Ap"]
    7.   ];
    Как перебрать чтобы остались лишь один совпавший, т.е:
    PHP:
    1. $array1 = [
    2.   ["name1"=>"Ars","name2"=>"Ar","name3"=>"Ap"],
    3.   ["name1"=>"Ars1","name2"=>"Ar","name3"=>"Ap"],
    4.   ["name1"=>"Ars2","name2"=>"Ar","name3"=>"Ap"]
    5.   ];
    Сортировка происходит по первому ключу "name1";
    Думал встроенными функциями массивов, но не Intersect ничего не дает, что и другие варианты.
    Спасибо заранее за ответ.
     
    #1 ainur777, 29 окт 2018
    Последнее редактирование: 29 окт 2018
  2. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    Все справился. Кому интересно:
    array_map("unserialize", array_unique(array_map("serialize", $array1)));
    Но возник еще вопрос, тот же пример с новыми ключами:
    PHP:
    1. $array1 = [
    2.   ["name1"=>"Ars","name2"=>"Ar","value"=>"1"],
    3.   ["name1"=>"Ars1","name2"=>"Ar","value"=>"2"],
    4.   ["name1"=>"Ars1","name2"=>"Ar","value"=>"3"],
    5.   ["name1"=>"Ars2","name2"=>"Ar","value"=>"4"],
    6.   ["name1"=>"Ars","name2"=>"Ar","value"=>"5"]
    7.   ];
    Нужно прибавить совпавшиеся. Прибавить value.
    PHP:
    1. $array1 = [
    2.   ["name1"=>"Ars","name2"=>"Ar","value"=>"6"],
    3.   ["name1"=>"Ars1","name2"=>"Ar","value"=>"5"],
    4.   ["name1"=>"Ars2","name2"=>"Ar","value"=>"4"]
    5.   ];
     
  3. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    интересно другое, откуда этот массив, если из БД, то 86% вы на ложном пути
     
  4. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    Если и из бд, то почему на ложном пути???????
     
  5. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @ainur777, потому, что из БД надо доставать данные уже без повторов если они не нужны
     
  6. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    Очень много чего там совпадает, отличается лишь несколько столбцов. (Из 80 только 3-4). Как ты хочешь вывести из бд, запросом? у них id только уникальное поле.
     
  7. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Это плохо, скорее всего БД не правильно спроектирована. Вы что-нибудь слышали о нормализации данных в БД?
     
  8. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    База не моя, по ней работаю. Уже год ведут, я не бдшник, чтобы делать реорганизацию. Просто хочу сделать работу проще, изначально сделал по другому, все работает. Ищу ответ может кто напишет проще.
     
  9. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @ainur777, покажите сам запрос, которым вы достаёте эти данные из БД.
     
  10. ainur777

    ainur777 Активный пользователь

    С нами с:
    24 май 2013
    Сообщения:
    93
    Симпатии:
    0
    SELECT * FROM zrnKupol.xrt_vbbAmur_bookRecover where name='RttER12333189' AND bag='789558' AND Material='PL';
     
  11. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Группировка по полю name1 и сумму для value. Я так понимаю name2 одинаковый для всей выборки?
    Судя по name1, name2 и тд. бд и правда плохо спроектированная.
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Конечно уникальность данных надо обеспечивать на уровне SQL. НО…
    При группировке во фразе select не могут стоять произвольные поля. Там допустимы только те данные, которые напрямую зависят от группирующего выражения.
    Проще говоря там могут быть только поля из фразы group by и агрегатные функции от других полей, например count().
    Раз в пару месяцев я пишу об этом на форуме )))

    Нельзя группировать с * в том смысле, что это будет бессмыслица. А в некоторых конфигурациях это буквально вызывает ошибку.

    Впрочем создавать бессмыслицу можно и на стороне php.
     
  13. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @artoodetoo, раз уж про группировку никто кроме меня не заикался, то твой пост про произвольные поля адресован мне? Тогда встречный вопрос зачем? :) Я то и без того это знаю, а ТС и след простыл.
    Моя задача "насорить хлебных крошек", что бы автор темы сам смог погуглить да разобраться. Готовый ответ - это же так скучно.
     
  14. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    Зачем - слишком общий вопрос. Так мы придем к тому зачем вообще тратить время на чьи-то вопросы. Твои в частности ;)
    --- Добавлено ---
    Я не уверен зачем это всё. От скуки, вероятно.