sort por ordenar objetos multidimensional fecha asociativo array_multisort array php sorting multidimensional-array sub-array

php - objetos - Ordenar una matriz multidimensional por el tamaño de sus sub-arrays



ordenar array por fecha php (4)

Esto podría ser lo que buscas:

natsort($sub_count); $rev = array_reverse($sub_count); $result = array_pad($rev, 3);

Es posible que desee omitir la clasificación real si los valores que tiene ya están en orden.

Tengo esta matriz multidimensional:

Array ( [0] => Array ( [0] => 2012-02-26 07:15:00 ) [1] => Array ( [0] => 2012-02-26 17:45:00 [1] => 2012-02-26 18:55:00 ) [2] => Array ( [0] => 2012-02-26 18:55:00 [1] => 2012-02-26 17:45:00 ) [3] => Array ( [0] => 2012-02-26 18:57:00 [1] => 2012-02-26 17:45:00 [2] => 2012-02-26 18:55:00 )

Cuando cuento subarreglos obtengo este 1,2,2,3. ¿Cómo podría recibirlo en 3,2,2,1? Necesito obtener, por ejemplo, los últimos 3 subarrays con el recuento de subcampos más alto (DESC, significa 3,2,2). ¿Cómo puedo conseguir esto?


Puede lograrlo utilizando la función de usort .

function cmp($a, $b){ return (count($b) - count($a)); } usort($array, ''cmp''); $highest_3_sub_arrays = array_slice($array, 0, 3);


$sizes=array(); foreach ($myarray as $k=>$v) if (!is_array($v)) $sizes["$k"]=0; else $sizes["$k"]=sizeof($v); sort($sizes); echo array_pop($sizes); //outputs 3 echo array_pop($sizes); //outputs 2 echo array_pop($sizes); //outputs 2


Me parece que todas las otras respuestas están trabajando demasiado. usort() , count() , y foreach() no son necesarios y cuando probé natsort() me dio: <b>Notice</b>: Array to string conversion in <b>[...][...]</b> .

rsort () colocará los subarreglos más largos primero.

Código:

$array=array( ["2012-02-26 18:55:00","2012-02-26 17:45:00"], ["2012-02-26 07:15:00"], ["2012-02-26 18:57:00","2012-02-26 17:45:00","2012-02-26 18:55:00"], ["2012-02-26 17:45:00","2012-02-26 18:55:00"] ); $size=3; // modify this line to declare how many subarrays to capture rsort($array); // sort the subarrays in DESC order var_export(array_slice($array,0,$size)); // print the first n subarrays

Salida:

array ( 0 => array ( 0 => ''2012-02-26 18:57:00'', 1 => ''2012-02-26 17:45:00'', 2 => ''2012-02-26 18:55:00'', ), 1 => array ( 0 => ''2012-02-26 18:55:00'', 1 => ''2012-02-26 17:45:00'', ), 2 => array ( 0 => ''2012-02-26 17:45:00'', 1 => ''2012-02-26 18:55:00'', ), )

Si desea implementar una clasificación adicional para romper los enlaces de longitud (como entre los dos subarreglos de dos elementos), tendrá que especificar eso en su pregunta.