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.
Wyzwanie
ŁatwyOtrzymasz 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);
?>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
1Zaawansowane funkcje
Funkcje anonimoweDomknięcia i „use”Funkcje strzałkoweFunkcje zwrotneUżywanie „call_user_func”Funkcje zmiennePrzekazywanie przez referencjęFunkcje rekurencyjnePowtórka: przegląd funkcji4Tablice wielowymiarowe
Tworzenie tablicy 2DDostęp do elementów tablicy 2DModyfikowanie elementów tablicy 2DIterowanie z użyciem zagnieżdżonych pętliAsocjacyjne tablice 2DPodsumowanie: ćwiczenie z prostą siatką2Zaawansowane operacje na tablicach
Dodawanie za pomocą 'array_push'Usuwanie za pomocą 'array_pop'Dodawanie za pomocą 'array_unshift'Usuwanie za pomocą 'array_shift'Łączenie tablic indeksowanychŁączenie tablic asocjacyjnychWyodrębnianie za pomocą 'array_slice'Wyszukiwanie wartości za pomocą 'in_array'Wyszukiwanie kluczy za pomocą 'array_search'Podsumowanie: ćwiczenie z playlistą3Sortowanie tablic
Sortowanie tablic indeksowanych rosnącoSortowanie tablic indeksowanych malejącoSortowanie tablic asocjacyjnych według wartościSortowanie tablic asocjacyjnych według kluczaSortowanie w kolejności naturalnejSortowanie niestandardowe za pomocą 'usort'Podsumowanie: sortowanie tabeli wynikówPoćwicz samodzielnie: Kompilator PHP online