Как отсортировать повторяющиеся значения массива по другому массиву в PHP? - PullRequest
1 голос
/ 15 февраля 2011

Я бы хотел отсортировать массив чисел (при сохранении индексов) в порядке убывания.

Дело в том, что если есть повторяющиеся значения, я бы хотел, чтобы они сортировались посопоставление значений во втором массиве.

Например, если массив:

0 => 13, 
1 => 21, 
2 => 15, 
3 => 21

А второй массив:

0 => 3, 
1 => 2, 
2 => 7, 
3 => 4

Тогда я бы хотел3 => 21 предшествует 1 => 21, поскольку совпадающее значение индекса 3 во втором массиве больше индекса 1 (4 > 2).Таким образом, окончательный отсортированный массив будет иметь вид:

3 => 21, 
1 => 21, 
2 => 15, 
0 => 13

Фактическая цель этого заключается в следующем:

Изобразите опрос.Каждый пользователь должен оценить параметры от 1 до X (X = количество вариантов).

Если пользователь оценивает ответ как первое, он получает X баллов, второй получает X-1,и т. д.

Таким образом, первый массив - это фактически оценка каждой опции (индекс - это идентификатор опции).

Второй массив - это количество пользователей, которые оценили опцию первой (индекс - это идентификатор опции, соответствующий индексам в первом массиве.)

Таким образом, когда есть два или более варианта с одинаковым счетом, тот, который имеет больше голосов первого ранга, оценивается выше.

Надеюсь, что это имеет смысл.
Спасибо!

Ответы [ 2 ]

0 голосов
/ 15 февраля 2011

Если я правильно понимаю, все, что вам нужно, это:

array_multisort($array1, $array2);

Плохая часть в том, что если вы используете индексированные массивы, они переиндексируются.Ваш пример становится: array(13, 15, 21, 21) и array(3, 2, 4, 7).

Вы можете обойти реиндекс, добавив какой-то символ (например, «0» или «x») к каждой клавише.

0 голосов
/ 15 февраля 2011

Конвертировать в:

$a = array(
    0 => array(13, 3), 
    1 => array(21, 2),
    2 => array(15, 7),
    3 => array(21, 4)
);

А затем используйте arsort($a) Дополнительная информация: http://php.net/manual/en/function.arsort.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...