Menu
Coddy logo textTech

Sortowanie niestandardowe za pomocą 'usort'

Część sekcji Logika i przepływ programu ścieżki PHP w Coddy. Lekcja 25 z 68.

Gdy wbudowane funkcje sortujące PHP nie spełniają Twoich konkretnych potrzeb, funkcja usort() zapewnia pełną elastyczność, umożliwiając Ci dokładne określenie sposobu porównywania i porządkowania elementów. Funkcja ta przyjmuje tablicę oraz napisaną przez Ciebie niestandardową funkcję porównującą, która określa logikę sortowania.

Funkcja porównująca otrzymuje dwa elementy z tablicy i musi zwrócić liczbę całkowitą: liczbę ujemną, jeśli pierwszy element powinien znaleźć się przed drugim, zero, jeśli są równe, lub liczbę dodatnią, jeśli pierwszy element powinien znaleźć się po drugim.

<?php
function compareByLength($a, $b) {
    return strlen($a) - strlen($b);
}

$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// Wynik: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>

W tym przykładzie funkcja porównująca oblicza różnicę między długościami ciągów znaków. Gdy strlen($a) - strlen($b) zwraca liczbę ujemną, oznacza to, że pierwszy ciąg znaków jest krótszy i powinien znaleźć się wcześniej w posortowanej tablicy.

Podobnie jak inne funkcje sortujące PHP, usort() modyfikuje bezpośrednio oryginalną tablicę. Ta potężna funkcja otwiera możliwości sortowania według dowolnych kryteriów, jakie możesz sobie wyobrazić, niezależnie od tego, czy jest to długość ciągu znaków, niestandardowa logika biznesowa czy złożone porównania wielu pól.

challenge icon

Wyzwanie

Łatwy

Otrzymasz jedno wejście: tablicę cen produktów w formacie JSON. Odczytaj dane wejściowe, przekonwertuj ciąg JSON na tablicę, utwórz funkcję porównującą, która sortuje ceny rosnąco, użyj usort() wraz z funkcją porównującą, aby posortować tablicę, i wyświetl posortowaną tablicę za pomocą print_r().

Format wejściowy: Jeden wiersz zawierający tablicę liczb w formacie JSON (przykład: [29.99,15.50,42.00,8.75,33.25])

Oczekiwany wynik: Posortowana rosnąco według ceny tablica wyświetlona za pomocą print_r()

Spróbuj swoich sił

<?php
// Odczytaj dane wejściowe
$input = fgets(STDIN);
$prices = json_decode($input, true);

// TODO: Utwórz funkcję porównującą i użyj usort(), aby posortować tablicę

// Wyświetl posortowaną tablicę
print_r($prices);
?>
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator PHP online