За последние 24 часа нас посетили 17616 программистов и 1652 робота. Сейчас ищут 870 программистов ...

Проблема с сортировкой элементов массива

Тема в разделе "Прочие вопросы по PHP", создана пользователем Ongi, 26 мар 2015.

  1. Ongi

    Ongi Новичок

    С нами с:
    25 янв 2015
    Сообщения:
    3
    Симпатии:
    0
    Добрый вечер, есть массив такого вида:
    Код (Text):
    1.  
    2. $array = [
    3.     [0] => [
    4.         'likes' => 10,
    5.         'dislikes' => 2,
    6.     ],
    7.     [1] => [
    8.         'likes' => 2,
    9.         'dislikes' => 20,
    10.     ],
    11.     [2] => [
    12.         'likes' => 1,
    13.         'dislikes' => 0,
    14.     ],
    15.     [3] => [
    16.         'likes' => 1,
    17.         'dislikes' => 0,
    18.     ],
    19. ]
    Задача состоит в том, чтобы сортировать элементы массива по убыванию разницы likes и dislikes.
    Первая идея была создать отдельный массив, где элементы были бы той самой разницей (если использовать пример выше, то массив выглядит так: [8, -18, 1, 1]) и сортировать исходный массив используя array_multisort. Этот вариант не подошел, потому что разница может быть отрицательной, а мультисорт просто игнорирует минус и сортировка получается неправильной.
    Вторая идея была в том, чтобы полученный массив с разницами поставить ключами в исходный массив (array_combine) и сортировать с помощью krsort. Это сработало, но если опять же взять полученный массив [8, -18, 1, 1], элементы в нем могут повторяться. В результате чего после array_combine получаются только 3 элемента.
    Очень нужнаюсь в совете, поскольку идей больше нет :(
     
  2. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Показывайте, что уже делали..., желательно видеть все варианты.
     
  3. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    usort() поможет
     
  4. Ongi

    Ongi Новичок

    С нами с:
    25 янв 2015
    Сообщения:
    3
    Симпатии:
    0
    Я и описала то, что делала )

    Тоже про него думала, но пока слабо представляю какая должна быть сама логика пользовательской функции. Буду думать
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    надо просто почитать справку по функции, там и примеры есть
     
  6. Ongi

    Ongi Новичок

    С нами с:
    25 янв 2015
    Сообщения:
    3
    Симпатии:
    0
    Спасибо, ребята, все оказалось намного проще :) Классические пузырьки :)