Intereting Posts
Silex: jQuery запрос AJAX вызывает исключение – для «GET …» не найден маршрут WordPress: как создать форму пользовательского поиска только на определенной странице Функции PHP preg_match и preg_match_all Выражение пользователей Windows в PHP? Im только получение одного набора результатов при попытке использовать mysql_fetch_array () как поместить объект по внешнему URL-адресу в amazon s3 Доступ к исходному коду HTML с использованием PHP или JavaScript Как я могу писать символы неанглийского языка, такие как арабские или персидские символы, в изображение? как проверить, разрешена ли функция PHP system ()? и не отключен по соображениям безопасности Простой PDO Wrapper не работает ROS catkin_init_workspace не найден, когда порожден как процесс PHP Я немного запутался, PHP говорит, что $ results является не объектом класса mysqli Загрузка дополнительных сообщений Ajax Button в WordPress – исправить getowebinar api php Многочисленные контроллеры Codeigniter и многие методы?

Сортировка многомерного массива по размеру его подматрицы

У меня этот многомерный массив:

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). Как я могу это достичь?

Related of "Сортировка многомерного массива по размеру его подматрицы"

Вы можете достичь этого, используя функцию 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-элементными подмассивами), вам нужно будет указать это в своем вопросе.