função de matriz personalizado usort PHP Assoc

votos
-1

Como posso ordenar as chaves em ordem decrescente pelo seu valor e se duas chaves têm a mesma quantidade, I deve imprimi-los em ordem alfabética. Eu sei que, provavelmente, uma função de usuário deve ser criada, mas eu não era capaz de aprender a fazer aqueles.

matriz:

array(3) {
  [motes]=>
  int(3)
  [shards]=>
  int(5)
  [fragments]=>
  int(5)
}

Saída:

fragments: 5
shards: 5
motes: 3
Publicado 08/11/2018 em 06:51
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Você pode usar uma função definida pelo usuário com uksorta conseguir o que deseja. Por também passando a matriz para a função, podemos enganar e classificar os valores antes de classificar nas teclas:

$array = array('motes' => 3, 'shards' => 5, 'fragments' => 5);
uksort($array, function ($a, $b) use ($array) { 
    if ($array[$a] < $array[$b]) return 1;
    elseif ($array[$a] > $array[$b]) return -1; 
    else return strcmp($a, $b); });
print_r($array);

Saída

Array ( 
    [fragments] => 5
    [shards] => 5
    [motes] => 3 
)

Demo no 3v4l.org

Respondeu 08/11/2018 em 07:57
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more