Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Exemplo com uso do <=> para ordenação crescente e decrescente

Olá, me surgiu uma dúvida em relação ao uso do operador <=>. Tendo o código

$notas = [
    [
        'aluno' => 'Maria',
        'nota' => 10,
    ],
    [
        'aluno' => 'Vinicius',
        'nota' => 6,
    ],
    [
        'aluno' => 'Ana',
        'nota' => 9,
    ],
];

function ordenaNotas(array $nota1, array $nota2): int
{
    return $nota2['nota'] <=> $nota1['nota'];
}

não entendi pq ele coloca em ordem decrescente, supondo que a $nota2 seja menor, ela retorna -1, logo a nota2 seria a primeira no array, ou seja, seria de forma crescente.

1 resposta
solução!

Olá, Tudo bem?

A documentação do PHP nos dá a seguinte definição para o operador de Nave espacial <=>:

"O operador nave espacial é utilizado para comparar duas expressões. Ele retorna -1, 0 ou 1 quando $a for respectivamente menor que, igual a ou maior que $b. As comparações são feitas de acordo com as já conhecidas regras de comparação de tipos do PHP."

Simplificando essa definição:

  • Retorna 1 se o valor da esquerda for maior
  • Retorna -1 se o valor da esquerda for menor
  • Retorna 0 se os valores forem iguais

Dessa forma, se tivéssemos os seguintes exemplos:

  • 12 <=> 10 // retorna 1
  • 8 <=> 10 // retorna -1
  • 10 <=> 10 // retorna 0

Agora, vamos entender melhor com a expressão vista na aula:

    return $nota2['nota'] <=> $nota1['nota'];
  • Quando a $nota2['nota'] for maior que $nota1['nota'], o retorno será 1, isso significa que a $nota2['nota'] será movida para cima da lista.
  • Quando a $nota2['nota'] for menor que a $nota1['nota'], o retorno será -1, isso significa que a $nota2['nota'] será movida para baixo da lista.

Então, a primeira comparação será:

  • 6 <=> 10 // retorna -1, ou seja, 6 é movido para baixo da lista

Segunda comparação:

  • 9 <=> 6 // retorna 1, ou seja, 9 é movido para cima da lista

Terceira comparação:

  • 9 <=> 10 // retorna -1, ou seja, 9 é movido para baixo da lista.

O resultado será este:

array(3) {           
  [0]=>              
  array(2) {         
    ["aluno"]=>      
    string(5) "Maria"
    ["nota"]=>       
    int(10)
  }
  [1]=>
  array(2) {
    ["aluno"]=>
    string(3) "Ana"
    ["nota"]=>
    int(9)
  }
  [2]=>
  array(2) {
    ["aluno"]=>
    string(8) "Vinicius"
    ["nota"]=>
    int(6)
  }
}

Espero ter ajudado!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓