开发者

sorting array after array_count_values

I have an array of products

$products = array_count_values($products);

now I have an array where $key is product number and $v开发者_JAVA百科alue is how many times I have such a product in the array. I want to sort this new array that product with the least "duplicates" are on the first place, but what ever I use (rsort, krsort,..) i loose product numbers (key).

any suggestions?

thanks.


Take a look at arsort() as an alternative to rsort() (and that family of functions).

Generally, the 'Sorting arrays' page on php.net might be useful to you - it's a comparison of PHP's array sorting functions based on what they sort, what direction they sort in, and whether they maintain the keys while sorting.


Mind you, for the sake of completion:

Going by 'now I have an array where $key is product number and $value is how many times I have such a product in the array. I want to sort this new array that product with the least "duplicates" are on the first place', you probably want asort() (the pendant to sort()).


Your comment example, using asort():

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

yields:

Array
(
    [9] => 1
    [2] => 2
    [1] => 3
    [5] => 3
)


You want to use asort():

This function sorts an array such that array indices maintain their correlation with the array elements they are associated with. This is used mainly when sorting associative arrays where the actual element order is significant.


rsort() was wrong from the first place anyway (and so are any other sorting functions that have the r (for reverse) in it), as it would sort the array from highest to lowest.

asort() sorts from lowest to highest:

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

gives

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

Note: These functions sort the arrays in-place. They do not return a sorted array. The return values is:

(..) TRUE on success or FALSE on failure.


Try using asort() or arsort() or any other sort function that maintains index association.


You should use asort() PHP function.


asort() is array sort, not ascending sort.

dsort doesn't exist. The function you are looking for is arsort() - array reverse sort.

https://www.php.net/manual/en/function.asort.php

https://www.php.net/manual/en/function.arsort.php


Just a thought; asort - sorts ascending (low to high)

perhaps try

dsort - descending (high to low)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜