2010-05-18 15 views
9

tengo una gran variedad de productosclasificación matriz después array_count_values ​​

$products = array_count_values($products); 

ahora tengo una matriz en donde $ clave es el número de producto y el valor $ es cuántas veces Tengo un producto de este tipo en la matriz. Quiero ordenar esta nueva matriz que el producto con menos "duplicados" es en primer lugar, pero lo que siempre uso (rsort, krsort, ..) pierdo los números del producto (clave).

alguna sugerencia?

gracias.

Respuesta

7

Eche un vistazo a arsort() como alternativa al rsort() (y esa familia de funciones).

En general, la página 'Sorting arrays' en php.net puede ser útil para usted: es una comparación de las funciones de clasificación de array de PHP en función de lo que clasifican, en qué dirección clasifican y si mantienen las claves mientras ordenan.


mente que, en aras de finalización:

A juzgar por 'ahora tengo una matriz en donde $ clave es el número de producto y el valor de $ es el número de veces que tengo un producto de este tipo en la matriz . Quiero ordenar esta nueva matriz que el producto con menos "duplicados" está en primer lugar ', es probable que desee asort() (el colgante a sort()).


Su comentario ejemplo, usando asort():

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

rendimientos:

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

Hola gracias por la respuesta rápida he comprobado arsort(), pero no devolver el resultado requerido cualquier sugerencias? – umermalik

+0

@umermalik: Solo me aseguro de entender lo que estás diciendo: obtienes el resultado correcto con 'rsort()' (excepto las teclas), pero no con 'arsort()' – pinkgothic

+3

'arsort()' ordena de * más alto * a * más bajo *, pero el OP quiere de * más bajo * a * más alto *. Por lo tanto, 'asort()' es la función adecuada para usar. –

3

Desea utilizar asort():

Esta función ordena una matriz tal que los índices de la matriz mantienen su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.


rsort() fue mal desde el primer lugar de todos modos (y también lo son las otras funciones de ordenación que tienen el r (por inversa) en ella), ya que sería ordenar la matriz de más alto a mínimo.

asort() tipo de más bajo a más alto :

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

da

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

Nota: Estas funciones ordenar las matrices en el lugar. Ellos no devuelven una matriz ordenada. Los valores de retorno es:

(..) TRUE en el éxito o en el fracaso FALSE.

+0

+1 para una explicación bastante ingeniosa y detallada de 'asort()', además de advertencias. – pinkgothic

0

Debe utilizar la función PHP asort().

-1

Solo un pensamiento; ASORT - tipo ascendente (de menos a más)

quizás prueba

dsort - descendente (de mayor a menor)

Cuestiones relacionadas