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 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.

challenge icon

Desafio

Fácil

Você 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);
?>
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

Pratique por conta própria: Compilador de PHP online