İçeriğe geç

Php alfabetik dizi sıralama fonksiyonu

Merhaba arkadaşlar,

Php’de dizileri sıralamak için çeşitli yöntemler ve fonksiyonlar bulunmaktadır. Örneğin diziyi büyükten küçüğe doğru sıralamak istediğimiz zaman rsort() fonksiyonunu kullanırız. Ancak rsort gibi aritmetik sıralama yapan fonksiyonlarda dizi anahtarlarının sayısal olarak ele alınması gerekir. Örneğin:


<?php

$dizi = array("ilk eleman","diğer eleman");

print_r($dizi);

?>

Bu kodu çalıştırdığımız zaman bize  Array( [0] => ilk eleman [1] => diğer eleman);  çıktısını verecektir. Burda gördüğünüz gibi anahtarlar sayısal ifadelerden oluşuyor.

Php’de alfabetik dizi sıralama yapabilmek için sort fonksiyonu kullanılır. Ancak matris dizilerde ve türkçe karakter içeren dizilerde hatalarla karşılaşabiliriz. Ben bu yazımda sort fonksiyonunun kullanımını değil projelerinizde kullanabileceğiniz php alfabetik dizi sıralama fonksiyonumu sizlerle paylaşacağım. Php alfabetik dizi sıralama fonksiyonu:


<?php

function array_sort($key, $array, $ascdesc='asc'){

   $temp = array();
   $latest = array();

   foreach($array as $id => $value) {
      $temp[$id] = $value[$key];
   }

   natcasesort($temp);

   foreach($temp as $id => $value){
      $latest[$id] = $array[$id];
   }

   if($ascdesc{0} === 'd') $latest = array_reverse($latest, true);

   return $latest;

}

?>

Bu fonksiyomuz sayesinde tek boyutlu ve çok boyutlu dizilerde istediğimiz anahtara göre alfabetik sıralama yapabilirsiniz. Gördüğünüz gibi 3 adet parametre gönderiyoruz. Birinci parametremiz($key) sıralama yapacağımız anahtarı belirmemizi sağlar. İkinci parametremiz ile hangi dizi üzerinde sıralama yapılacağını belirtiyoruz. Son parametremiz ise büyükten küçüğe doğru mu yoksa küçükten büyüğe doğru mu sıralama yapılacağını belirtmemizi sağlar. Varsayılan olarak a’dan z’ye doğru sıralama yapar. Ayrıca sadece alfabetik değil sayısal olarak da sıralama yapabilmemiz mümkündür. Şimdi örnek vererek konuyu pekiştirelim.

Senaryo: Menüleri sakladığımız çok boyutlu bir dizi içerisinde her bir menü ayrı bir dizide saklanıyor. Her menünün kendine ait bir sıra(order) değeri var. Örneğin php adlı menünün sıralama değeri “x”. Css adlı menünün ise sıralama değeri “y”. Burada dizimizin sıra değerine göre alfabetik sıralama yapmak istiyoruz. Önce diziyi oluşturalım.


<?php

$dizi = array(
   "php" => array(
      "name" => "Php",
      "title" => "Php Welcome",
      "order" => "x"
   ),
   "css" => array(
      "name" => "Css",
      "title" => "Css Welcome",
      "order" => "y"
   )
);

?>

Şimdi de senaryomuzda ki sıralama işlemimizi yapalım.


<?php

function array_sort($key, $array, $ascdesc='asc'){

   $temp = array();
   $latest = array();

   foreach($array as $id => $value) {
      $temp[$id] = $value[$key];
   }

   natcasesort($temp);

   foreach($temp as $id => $value){
      $latest[$id] = $array[$id];
   }

   if($ascdesc{0} === 'd') $latest = array_reverse($latest, true);

   return $latest;

}

$dizi = array(
   "php" => array(
      "name" => "Php",
      "title" => "Php Welcome",
      "order" => "x"
   ),
   "css" => array(
      "name" => "Css",
      "title" => "Css Welcome",
      "order" => "y"
   )
);

$dizi = array_sort("order", $dizi);

print_r($dizi);

?>

Bu şekilde istediğimiz sonucu elde ederiz. Umarım faydalı olur arkadaşlar. Görüşmek üzere 🙂

Kategori:PHP

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir