2
respostas

DÚVIDA NO RESULTADO DA ORDENAÇÃO DE ARRAYS

Fiquei com uma dúvida sobre o código de uma das aulas, eu testei aqui e funcionou como o professor mostrou, só que aconteceu uma coisa meio doida:

-Primeiro, eu fiz essa lista com arrays dentro que mostram pessoas e suas notas.

$notas=[
    ['aluno'=>'Jorge',
    'nota'=> 7],
    ['aluno'=>'Wilson',
     'nota'=>9],
    ['aluno'=>'Sonia',
    'nota'=>10]
];

-Depois, usei a função para ordenar os elementos dentro da lista, assim como diz a aula.

function ordenar_Notas(array $Nota1,array $Nota2){
    if ($Nota1['nota']>$Nota2['nota']){
            return -1;
        }
    if ($Nota1['nota']<$Nota2['nota']){
        return 1;
    }
    return 0;

}
usort($notas,'ordenar_Notas');
var_dump(($notas));

Só que na hora de ordenar , aconteceu isso: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Realmente, ficou ordenado, mas eu só pedi pros 2 primeiros itens serem ordenados, ou seja, dos alunos "Jorge" e "Wilson". Por que a outra aluno foi ordenada também?

2 respostas

Olá, Daniel! Tudo bem?

Isso acontece porque a função usort é usada para ordenar todo o array com base na função de comparação fornecida. No seu caso, a função ordenar_Notas está sendo usada como critério de comparação para determinar a ordem dos elementos.

Se você deseja ordenar apenas os dois primeiros elementos, você pode utilizar a função array_slice para criar um novo array contendo apenas esses elementos. Em seguida, você pode usar a função usort para ordenar esse novo array.

Aqui está um exemplo de como você pode fazer isso:

$notas=[ 
    ['aluno'=>'Jorge', 
    'nota'=> 7], 
    ['aluno'=>'Wilson', 
     'nota'=>9], 
    ['aluno'=>'Sonia', 
    'nota'=>10] 
];

function ordenar_Notas(array $Nota1,array $Nota2){
    if ($Nota1['nota']>$Nota2['nota']){
            return -1;
        }
    if ($Nota1['nota']<$Nota2['nota']){
        return 1;
    }
    return 0;
}

$primeiros_dois = array_slice($notas, 0, 2);
usort($primeiros_dois, 'ordenar_Notas');
var_dump($primeiros_dois);

Dessa forma, apenas os dois primeiros elementos do array serão ordenados com base na função ordenar_Notas.

Espero ter ajudado e bons estudos!

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

Ahhh, beleza. Entendi, muito obrigado.