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.