Sortowanie w kolejności naturalnej
Część sekcji Logika i przepływ programu ścieżki PHP w Coddy. Lekcja 24 z 68.
Standardowe funkcje sortowania PHP sprawdzają się w większości przypadków, ale mogą dawać nieoczekiwane wyniki podczas sortowania ciągów znaków zawierających liczby. Funkcja natsort() rozwiązuje ten problem, korzystając z algorytmu „naturalnego porządku”, który sortuje ciągi znaków w sposób zgodny z naturalnymi oczekiwaniami ludzi.
Rozważmy ten przykład z nazwami plików:
<?php
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// Zwykłe sort() daje: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
print_r($files);
// Przywróć początkową zawartość tablicy
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// natsort() daje: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);
?>Ta różnica jest kluczowa: zwykłe sort() porównuje ciągi znaków znak po znaku, dlatego „file10.txt” znajduje się przed „file2.txt”, ponieważ „1” jest przed „2” w ASCII. Natomiast natsort() rozpoznaje części numeryczne i sortuje je numerycznie, umieszczając „file2.txt” przed „file10.txt”, zgodnie z naturalnymi oczekiwaniami.
Podobnie jak inne funkcje sortujące PHP, natsort() modyfikuje oryginalną tablicę bezpośrednio. Dzięki temu jest szczególnie przydatna do porządkowania list plików, numerów wersji lub dowolnych danych, w których ciągi znaków zawierają liczby, które należy sortować numerycznie, a nie alfabetycznie.
Wyzwanie
ŁatwyOtrzymasz jedno wejście: tablicę numerów wersji oprogramowania w formacie JSON. Odczytaj wejście, przekonwertuj ciąg JSON na tablicę, użyj natsort(), aby posortować numery wersji w naturalnej kolejności, i wyświetl posortowaną tablicę za pomocą print_r().
Format wejściowy: Jeden wiersz zawierający tablicę JSON ciągów znaków z numerami wersji (przykład: ["v1.10","v1.2","v1.20","v1.3"])
Oczekiwane wyjście: Posortowana tablica w naturalnej kolejności, wyświetlona za pomocą print_r()
Spróbuj swoich sił
<?php
// Odczytaj dane wejściowe
$input = fgets(STDIN);
// Przekształć ciąg JSON w tablicę
$versions = (array)json_decode($input, true);
// TODO: Napisz poniżej kod sortujący tablicę za pomocą natsort()
// Wyświetl posortowaną tablicę
print_r($versions);
?>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