У меня этот многомерный массив:
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 )
Когда я подсчитываю subarrays, я получаю это 1,2,2,3. Как я мог получить его в 3,2,2,1? Мне нужно получить, например, последние 3 подмассива с наивысшим подсчетом подсчета (DESC, это означает 3,2,2). Как я могу это достичь?
Вы можете достичь этого, используя функцию usort .
function cmp($a, $b){ return (count($b) - count($a)); } usort($array, 'cmp'); $highest_3_sub_arrays = array_slice($array, 0, 3);
Это может быть то, что вы ищете:
natsort($sub_count); $rev = array_reverse($sub_count); $result = array_pad($rev, 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
Мне кажется, что все остальные ответы слишком усердны. usort()
, count()
и foreach()
не нужны, и когда я попробовал natsort()
он дал мне: <b>Notice</b>: Array to string conversion in <b>[...][...]</b>
.
Сначала rsort () выведет самые длинные подмассивы.
Код:
$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
Вывод:
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', ), )
Если вы хотите реализовать некоторую дополнительную сортировку для разрыва связей длины (например, между двумя вашими 2-элементными подмассивами), вам нужно будет указать это в своем вопросе.