Menu
Coddy logo textTech

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.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Fácil

Você 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);
?>
quiz iconTeste seus conhecimentos

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