Php’de dizileri uzunluğuna göre sıralamak

Tarih: 21 Ocak 2013 Kategori: Php 1 Yorum

Php’de dizileri anahtar (key) ve değer (value) uzunluğuna (length) göre sıralayan hazır sıralama fonksiyonu bulunmuyor. Bu işlemi kolaylıkla yapmak için Php‘de bulunan usort() ve uksort() fonksiyonlarından yararlanabiliriz. Bu fonksiyonlar dizileri kullanıcı tanımlı sıralama yapmaya yarar. Fonksiyonun başındaki u harfi user anlamına gelir. usort() ve uksort() fonksiyonu iki parametre alır. Birinci parametre sıralama yapılacak dizi, ikinci parametre kullanıcı tanımlı fonksiyondur. usort() ve uksort() arasındaki fark: usort değere, uksort anahtara göre sıralama yapar.  Aşağıdaki kod diziyi değer uzunluğuna göre sıralar.

<?php
function sirala($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return (strlen($a) < strlen($b)) ? -1 : 1;
}
$a = array('nane', 'limon', 'limouncu', 'tantunici', 'Şalgam');
usort($a, 'sirala');
print_r($a);
?>

Yukarıdaki kodun çıktısı:

Array
(
    [0] => nane
    [1] => limon
    [2] => Şalgam
    [3] => limouncu
    [4] => tantunici
)

Olacaktır. Diziyi değer uzunluğuna göre sıraladı ve en az harfi olan nane yukarıda, en çok harfi olan tantunici en aşağıda yer aldı.

usort() fonksiyonuna geçireceğimiz kendi karşılaştırma fonksiyonumuz iki parametre almalı, eğer bunlar birbirine eşitse 0 döndürmelidir. Eğer küçükse sıfırdan küçük, büyükse sıfırdan büyük değer döndürmesi gerekir. Kendi yazdığımız fonksiyonu usort() fonksiyonuna geçirirken parantez kullanmadığımıza ve ek parametre geçirmediğimize dikkat edin. Bu anlatılanlar uksort() içinde aynıdır.

uksort() ile anahtar uzunluğuna göre sıralama yapmak:

<?php
function sirala($a, $b)
{
    if ($a == $b) {
        return 0;
    }
    return (strlen($a) < strlen($b)) ? -1 : 1;
}
$a = array('abcd'=>'nane', 'abcde'=>'limon', 'a'=>'limouncu', 'ab'=>'tantunici', 'abc'=>'Şalgam');
uksort($a, 'sirala');
print_r($a);
?>

Yukarıdaki kodun çıktısı:

Array
(
    [a] => limouncu
    [ab] => tantunici
    [abc] => Şalgam
    [abcd] => nane
    [abcde] => limon
)

Şeklinde olacaktır. Bana göre pratik ve faydalı. Görüşmek üzere, iyi çalışmalar.

1 Yorum

Yorum Yapın