Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Dizilerde sıralama

Konu, 'PHP' kısmında izmiralem tarafından paylaşıldı.

  1. izmiralem

    izmiralem Aktif Üye

    Kayıt:
    7 Şubat 2010
    Mesajlar:
    290
    Beğenilen Mesajlar:
    32
    Meslek:
    Bilgisayar Teknik Servis Hizmt.
    Şehir:
    izmir
    Merhaba arkadaşlar.

    Bir dizi sorun ile karşınızdayım. Çünkü dizilerde sıralama ile ilgili o kadar level atladık ki, artık fantezi yapıyoruz. Şimdi geleyim işin özüne. Elimde bir dizi var ve bazı şartlara göre bunları sıralamak istiyorum ancak şartlara uymayanlar da sıra değişmesin.

    Örnek olarak Array içeriğimiz :

    $dizi[0] = array( baslik =>'Konu başlığı' , tarih =>'01.01.2019');
    $dizi[1] = array( baslik =>'Konu başlığı' , tarih =>'01.01.2003');
    $dizi[2] = array( baslik =>'Konu başlığı' , tarih =>'01.01.2002');
    $dizi[3] = array( baslik =>'Konu başlığı' , tarih =>'01.01.2007');
    $dizi[4] = array( baslik =>'Konu başlığı' , tarih =>'01.01.2018');

    Bu 5 diziyi sıralarken, tarih değeri 2017 den büyük olanları en başa almak istiyorum. Ancak diğerlerine ait sıralama değişmeyecek.

    Örnek çıktımız şu şekilde olacak bir fonksiyon gerekli :

    $dizi[4] = array( baslik =>'Konu başlığı' , tarih =>'01.01.2018');
    $dizi[0] = array( baslik =>'Konu başlığı' , tarih =>'01.01.2019');

    ---------------------------------------------------------------------------
    $dizi[1] = array( baslik =>'Konu başlığı' , tarih =>'01.01.2003');
    $dizi[2] = array( baslik =>'Konu başlığı' , tarih =>'01.01.2002');
    $dizi[3] = array( baslik =>'Konu başlığı' , tarih =>'01.01.2007');

    Örnek çıktıda görüldüğü gibi kırmızı olanlar yukarı taşındı, diğerlerinde sıralama değişmeyecek. Yalnızca verdiğimiz tarihten daha yüksek değere sahip olanlar başa alınacak.

    İndis değerleri değişebilir onda bir sorun yok.

    Bir fikriniz veya hali hazırda kullandığınız bir fonksiyon var ise yardımcı olursanız sevinirim.
     
  2. sedirAğacı

    sedirAğacı Daimi Üye

    Kayıt:
    2 Mart 2016
    Mesajlar:
    898
    Beğenilen Mesajlar:
    237
    Meslek:
    Bilgisayar programcısı.
    Şehir:
    Aydın
    Bu işin PHP de hazır komutu yoksa, mantığı şöyle olabilir.

    Aynı eleman sayısına sahip boş dizi yarat.
    Kaynak diziyi döngü içinde okut, 2017 den büyük bulunca ikinci diziye tepeden itibaren koymaya başla. Taşıdığın her elemanı kaynak dizide sil.
    2017 den büyükler bitince, aynı döngü içinde yada döngüden çıkıp yeni döngü içinde kalan elemanlarıda teker teker sıradaki boş alanlara taşı.
    Bu işlemleri array fonksiyonda yapar, parametre olarakta yıl alırsın, geriye sonuç diziyi döndürürsün.

    Eğer taşındığı yerde tarihlerde 2017 şartına bağlı olarak sıralanacaksa. O zaman iş epey karışır ama mümkün. :)
     
    Çarkçı bunu beğendi.
Benzer Konular
Yüklüyor...