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 flexibilidade máxima, permitindo que você defina exatamente como os elementos devem ser comparados e ordenados. Essa função recebe 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 inteiro: um número negativo se o primeiro elemento deve vir antes do segundo, zero se eles 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.
Assim como outras funções de ordenação do PHP, usort() modifica o array original diretamente. Essa poderosa função abre possibilidades para ordenar por qualquer critério que você possa imaginar, seja comprimento de string, lógica de negócio personalizada ou comparações complexas de vários campos.
Desafio
FácilVocê receberá uma entrada: um array de preços de produtos no 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 da 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()
Experimente você mesmo
<?php
// Ler a entrada
$input = fgets(STDIN);
$prices = json_decode($input, true);
// TODO: Crie uma função de comparação e use 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 LeaderboardPratique por conta própria: Compilador de PHP online