Ordenação Personalizada com 'usort'
Parte da seção Lógica & Fluxo do Journey de PHP da Coddy — lição 25 de 68.
Quando as funções de ordenação integradas do PHP não atendem às suas necessidades específicas, a função usort() oferece a flexibilidade máxima ao permitir que você defina exatamente como os elementos devem ser comparados e ordenados. Esta função recebe o seu array e uma função de comparação personalizada que você escreve para determinar a lógica de ordenação.
A função de comparação recebe dois elementos do array e deve retornar um número inteiro: um número negativo se o primeiro elemento deve vir antes do segundo, zero se forem iguais, ou um número positivo se o primeiro deve vir depois do segundo.
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// Saída: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>Neste exemplo, a função de comparação calcula a diferença entre os comprimentos das strings. Quando strlen($a) - strlen($b) retorna um número negativo, isso significa que a primeira string é mais curta e deve vir primeiro no array ordenado.
Como outras funções de ordenação do PHP, usort() modifica o array original diretamente. Esta função poderosa abre possibilidades para ordenação por qualquer critério que você possa imaginar — seja o comprimento da string, lógica de negócios personalizada ou comparações complexas de múltiplos campos.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilVocê receberá uma entrada: um array de preços de produtos em formato JSON. Leia a entrada, converta a string JSON em um array, crie uma função de comparação que ordene os preços em ordem crescente, use usort() com sua função de comparação para ordenar o array e imprima o array ordenado usando print_r().
Formato de entrada: Uma linha contendo um array JSON de números (exemplo: [29.99,15.50,42.00,8.75,33.25])
Saída esperada: O array ordenado em ordem crescente por preço, exibido usando print_r()
Folha de consulta
A função usort() permite a ordenação personalizada ao aceitar uma função de comparação que define a lógica de ordenação.
A função de comparação recebe dois elementos e deve retornar:
- Número negativo: o primeiro elemento vem antes do segundo
- Zero: os elementos são iguais
- Número positivo: o primeiro elemento vem depois do segundo
<?php
function compareByLength($a, $b) {
return strlen($a) - strlen($b);
}
$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// Saída: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>Como outras funções de ordenação do PHP, a usort() modifica o array original diretamente.
Experimente você mesmo
<?php
// Ler entrada
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: Criar uma função de comparação e usar usort() para ordenar o array
// Exibir o array ordenado
print_r($prices);
?>Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Funções Avançadas
Funções AnônimasClosures e 'use'Arrow FunctionsFunções de CallbackUsando 'call_user_func'Funções VariáveisPassagem por ReferênciaFunções RecursivasRecapitulação: Mix de Funções4Arrays Multidimensionais
Criando um Array 2DAcessando Elementos de um Array 2DModificando Elementos de um Array 2DIterando com Loops AninhadosArrays Associativos 2DRecapitulação: Exercício de Grade Simples2Manipulações Avançadas de Arrays
Adicionando com 'array_push'Removendo com 'array_pop'Adicionando com 'array_unshift'Removendo com 'array_shift'Mesclando Arrays IndexadosMesclando Arrays AssociativosExtraindo com 'array_slice'Valores com 'in_array'Chaves com 'array_search'Recapitulação: Exercício de Playlist3Ordenação de Arrays
Ordenar Arrays Indexados (Crescente)Ordenar Arrays Indexados (Decrescente)Ordenar Arrays Associativos por ValorOrdenar Arrays Associativos por ChaveOrdenação por Ordem NaturalOrdenação Personalizada com 'usort'Recapitulação: Ordenação de Leaderboard