Doğal Sıralama (Natural Order)
Coddy'nin PHP Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 24 / 68.
PHP'nin standart sıralama fonksiyonları çoğu durum için iyi çalışsa da, sayı içeren dizeleri sıralarken beklenmedik sonuçlar üretebilirler. natsort() fonksiyonu, dizeleri insanların doğal olarak bekleyeceği şekilde sıralayan bir "doğal sıralama" algoritması kullanarak bu sorunu çözer.
Dosya adlarını içeren bu örneği inceleyin:
<?php
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// Normal sort() şunları üretir: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
print_r($files);
// Diziyi sıfırla
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// natsort() şunları üretir: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);
?>Fark kritiktir: normal sort() dizeleri karakter karakter karşılaştırır, bu nedenle ASCII'de "1", "2"den önce geldiği için "file10.txt", "file2.txt"den önce gelir. Ancak, natsort() sayısal kısımları tanır ve bunları sayısal olarak sıralar; "file2.txt"i doğal olarak bekleyeceğiniz gibi "file10.txt"den önce yerleştirir.
Diğer PHP sıralama fonksiyonları gibi, natsort() orijinal diziyi doğrudan değiştirir. Bu, onu dosya listelerini, sürüm numaralarını veya dizelerin alfabetik yerine sayısal olarak sıralanması gereken gömülü sayılar içerdiği herhangi bir veriyi düzenlemek için özellikle yararlı kılar.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Görev
KolayBir girdi alacaksınız: JSON formatında bir yazılım sürüm numaraları dizisi. Girdiyi okuyun, JSON dizesini bir diziye dönüştürün, sürüm numaralarını doğal sıralamaya göre sıralamak için natsort() kullanın ve sıralanmış diziyi print_r() kullanarak yazdırın.
Girdi formatı: Sürüm dizelerinden oluşan bir JSON dizisi içeren tek bir satır (örnek: ["v1.10","v1.2","v1.20","v1.3"])
Beklenen çıktı: print_r() kullanılarak görüntülenen, doğal sıralamadaki sıralanmış dizi
Kopya kağıdı
natsort() fonksiyonu, dizeleri "doğal sıralama" (natural ordering) kullanarak sıralar; bu, insanların sayı içeren dizelerin sıralanmasını doğal olarak beklediği yöntemdir.
Standart sort() dizeleri karakter karakter karşılaştırırken, natsort() sayısal kısımları tanır ve onları sayısal olarak sıralar:
$files = ["file1.txt", "file10.txt", "file2.txt", "file20.txt"];
// Standart sort() şunları üretir: file1.txt, file10.txt, file2.txt, file20.txt
sort($files);
// natsort() şunları üretir: file1.txt, file2.txt, file10.txt, file20.txt
natsort($files);
print_r($files);Diğer PHP sıralama fonksiyonları gibi, natsort() orijinal diziyi doğrudan değiştirir. Dosya listeleri, sürüm numaraları veya sayısal olarak sıralanması gereken gömülü sayılar içeren her türlü veri için özellikle yararlıdır.
Kendin dene
<?php
// Girdiyi oku
$input = fgets(STDIN);
// JSON dizesini diziye dönüştür
$versions = (array)json_decode($input, true);
// YAPILACAK: natsort() kullanarak diziyi sıralamak için kodunuzu aşağıya yazın
// Sıralanmış diziyi yazdır
print_r($versions);
?>Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1İleri Seviye Fonksiyonlar
Anonim FonksiyonlarClosure'lar ve 'use'Ok Fonksiyonları (Arrow Functions)Geri Çağırma (Callback) Fonksiyonları'call_user_func' KullanımıDeğişken FonksiyonlarReferans ile Değer AktarımıÖz Yinelemeli (Recursive) FonksiyonlarÖzet: Fonksiyon Karması4Çok Boyutlu Diziler
2 Boyutlu Dizi Oluşturma2 Boyutlu Dizi Elemanlarına Erişme2 Boyutlu Dizi Elemanlarını Değiştirmeİç İçe Döngülerle Yineleme2 Boyutlu İlişkisel DizilerÖzet: Basit Izgara Egzersizi2İleri Düzey Dizi İşlemleri
'array_push' ile Ekleme'array_pop' ile Silme'array_unshift' ile Ekleme'array_shift' ile Silmeİndisli Dizileri Birleştirmeİlişkisel Dizileri Birleştirme'array_slice' ile Kesit Alma'in_array' ile Değer Kontrolü'array_search' ile Anahtar AramaÖzet: Çalma Listesi Alıştırması3Dizileri Sıralama
İndisli Dizileri Artan Sırada Sıralamaİndisli Dizileri Azalan Sırada Sıralamaİlişkisel Dizileri Değere Göre Sıralamaİlişkisel Dizileri Anahtara Göre SıralamaDoğal Sıralama (Natural Order)'usort' ile Özel SıralamaÖzet: Liderlik Tablosu Sıralama