сортировка массива после array_count_values - PullRequest
9 голосов
/ 18 мая 2010

У меня есть массив продуктов

$products = array_count_values($products);

теперь у меня есть массив, где $ key - номер продукта, а $ value - сколько раз у меня такой продукт в массиве. Я хочу отсортировать этот новый массив, что продукт с наименьшим количеством "дубликатов" на первом месте, но что бы я ни использовал (rsort, krsort, ..) цифры (ключ).

есть предложения?

спасибо.

Ответы [ 5 ]

8 голосов
/ 18 мая 2010

Взгляните на arsort() как альтернативу rsort() (и этому семейству функций).

Как правило, страница ' Сортировка массивов ' на php.net может быть полезна для вас - это сравнение функций сортировки массивов PHP на основе того, что они сортируют, в каком направлении сортировать и сохранять ли ключи при сортировке.


Имейте в виду, ради завершения:

Переходя к ', теперь у меня есть массив, где $ key - это номер продукта, а $ value - сколько раз у меня есть такой продукт в массиве. Я хочу отсортировать этот новый массив, чтобы продукт с наименьшим количеством «дубликатов» был на первом месте ', вы, вероятно, хотите asort() (кулон для sort()).


Пример вашего комментария, используя asort():

$arr = array(
    1 => 3,
    2 => 2,
    5 => 3,
    9 => 1
);
asort($arr);
print_r($arr);

выходы:

Array
(
    [9] => 1
    [2] => 2
    [1] => 3
    [5] => 3
)
3 голосов
/ 18 мая 2010

Попробуйте использовать asort() или arsort() или любую другую функцию сортировки, которая поддерживает индекс ассоциации .

3 голосов
/ 18 мая 2010

Вы хотите использовать asort():

Эта функция сортирует массив так, что индексы массива сохраняют свою корреляцию с элементами массива , с которыми они связаны. Это используется в основном при сортировке ассоциативных массивов, где фактический порядок элементов является значительным.


rsort() в любом случае был неправильным с первого места (как и любые другие функции сортировки, в которых есть r (для реверс )), так как он будет сортировать массив из самый высокий до самый низкий .

asort() сортирует от низший до высший :

<?php
$array = array('f'=>1, 'a'=>2, 'c'=>5);  
asort($array);
print_r($array);

дает

Array
(
    [f] => 1
    [a] => 2
    [c] => 5
)

Примечание : эти функции сортируют массивы на месте . Они не возвращают отсортированный массив. Возвращаемые значения:

(..) TRUE в случае успеха или FALSE в случае ошибки.

0 голосов
/ 23 марта 2012

Просто мысль; asort - сортировка по возрастанию (от низкой к высокой)

возможно попробуйте

dsort - по убыванию (по убыванию)

0 голосов
/ 18 мая 2010

Вы должны использовать asort() функцию PHP.

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