2012-11-16 3 views
-2

Сортировка массива по количеству ключей.Сортировка массива desc в порядке счета php

<?php 
$key_a='a'; 
$key_b='b'; 
$key_c='c'; 

$myarray[$key_a][]='1'; 
$myarray[$key_a][]='2'; 
$myarray[$key_a][]='3'; 

$myarray[$key_b][]='2'; 
$myarray[$key_b][]='2'; 

$myarray[$key_c][]='a'; 
?> 

Я хочу, чтобы в конечном итоге с помощью следующего массива:

<?php 
$myarray[$key_a][]='1'; 
$myarray[$key_a][]='2'; 
$myarray[$key_a][]='3'; //$key_a with 3 values 

$myarray[$key_b][]='2'; 
$myarray[$key_b][]='2'; //$key_b with 2 values 

$myarray[$key_c][]='a'; //$key_c with 1 value 
?> 

Пользовательская функция необходима, чтобы получить новый массив, отсортированный по самой высокой подсчета значений?

Также - если есть совпадение в сумме общих ключей/значений, я хотел бы работать с $ key_a, $ key_b и $ key_c, чтобы отсортировать их между ними - в этом случае, если $ key_b array имел 3 значения , $ key_a, объявленный как 'a', будет первым в новом массиве при сортировке альфы. Но вместо этого было бы числовым, если два вспомогательных массива имеют одинаковое количество ключей, то они предпочтительно будут отсортированы по числу по ключевым словам.

ответ

0
uksort($myarray, function ($a, $b) use ($myarray) { 
    $valDiff = count($myarray[$a]) - count($myarray[$b]); 

    if ($valDiff != 0) { 
     return $valDiff; 
    } else { 
     return strcmp($a, $b); 
    } 
}); 

http://php.net/uksort

+0

(Или, возможно, '$ a' и' $ b' переключился, я никогда не могу вспомнить, которые возвращают результаты значений по возрастанию и убыванию значения. Попробуйте.) – deceze

Смежные вопросы