PHP’de Diziler Nasıl Sıralanır?

PHP'de Diziler Nasıl Sıralanır?

Sıralanmış verilerden belirli bir bilgi parçasını almak her zaman daha kolaydır, aksi takdirde dizinin her bir öğesini birer birer gözden geçirmeniz gerekir.

Örneğin, bir sınıftaki farklı öğrencilerin puanlarını bir dizide veya tabloda sakladığınızı varsayalım. Veriler elde edilen puanlara göre sıralanmıyorsa, kimin en yüksek ve en düşük puanı aldığını söylemeden önce sınıftaki her öğrencinin puanına bakmanız gerekir. Tablo zaten puan bazında düşükten yükseğe sıralanmışsa, sadece ilk öğrencinin puanına bakmak size en düşük notu söyleyecektir.

Sıralama, belirli bir veri kümesine erişmeyi veya elde etmeyi gerektiren birçok görevi çok kolay ve verimli hale getirir. Bu eğitimde, farklı dizi türlerini sıralamak için yerleşik PHP işlevlerini nasıl kullanacağımızı öğreneceğiz.

Bir Diziyi Değere Göre Sıralama

PHP’de bir diziyi öğelerinin değerine göre sıralamak çok kolaydır. Anahtar/değer ilişkilerini korumayı veya atmayı seçebilir ve ayrıca öğelerin nasıl sıralanacağını belirlemek için kendi işlevlerinizi tanımlayabilirsiniz. Size öğreticinin bu bölümünde nasıl olduğunu göstereceğim.

kullanabilirsiniz sort(&$array, $sort_flags) Bir dizinin değerlerini düşükten yükseğe sıralama işlevi. Ancak, diziyi sıralarken herhangi bir anahtar-değer ilişkisini korumayacaktır. Basit bir yeniden sıralama yerine, sıralanan öğelere yeni anahtarlar atanır. İsteğe bağlı ikinci parametre, öğelerin nasıl sıralanacağını belirlemenize olanak tanır. Altı farklı değere sahip olabilir:

  1. SORT_REGULAR— türlerini değiştirmeden değerleri sıralar.
  2. SORT_NUMERIC— değerleri sayısal olarak karşılaştırarak sıralayın.
  3. SORT_STRING—değerleri dizeler olarak karşılaştırarak sıralayın.
  4. SORT_LOCALE_STRING—geçerli yerel ayara dayalı olarak değerleri dizeler olarak karşılaştırın. kullanarak yerel ayarı kendiniz güncelleyebilirsiniz. setlocale().
  5. SORT_NATURAL—öğeleri dizeler olarak karşılaştırırken “doğal sıralama” kullanarak sıralayın.
  6. SORT_FLAG_CASE-ile birleştirilebilir SORT_STRING veya SORT_NATURAL dizeleri sıralarken büyük/küçük harf duyarlılığını kapatmak için.

Tüm sıralama bayrakları arasındaki farkı hızlı bir şekilde kavramanıza yardımcı olacak birkaç sıralama örneği.

İlk örnekte, düzenli sıralama, sayısal diziler sayısal değerlerine dönüştürülür ve buna göre sıralama yapılır. “Apple” dizesi sayısal değildir, bu nedenle dokunulmadan bırakılır ve bir dize olarak karşılaştırılır.

İkinci örnekte, sayısal sıralamada, verilerin sayısal değere göre sıralanmasını istiyoruz, bu nedenle “Elma” sayısal değere 0 dönüştürülür ve önce gelir. Değerlerin geri kalanı beklendiği gibi sıralanır.

Üçüncü örnekte, tüm değerler dizeler olarak ele alınır. Bu, 123 veya 3249832’nin sayısal değerini 38 ile karşılaştırmak yerine, her seferinde bir karakter olmak üzere dizeler olarak karşılaştırıldıkları anlamına gelir. “1”, “3”ten önce geldiğinden, 123 değeri 38’den küçük kabul edilir.

Dizi değerlerinizi düşükten yükseğe değil, yüksekten düşüğe sıralamak istiyorsanız, bunu aşağıdakiler yardımıyla yapabilirsiniz. rsort() işlev. ile aynı parametreleri kabul eder. sort() ancak değerleri ters sırada sıralar. Ayrıca, herhangi bir anahtar/değer ilişkisini korumaz, bu nedenle ilişkisel dizileri sıralamak için iyi bir seçim değildir.

İlişkisel Diziyi Sırala

İlişkisel dizilerle uğraşırken anahtar/değer ilişkileri önemli hale gelir.

Farklı kişilerin adlarını ve en sevdikleri meyveleri saklamak için bir ilişkisel dizinin kullanıldığı aşağıdaki örneği düşünün. Listeyi meyve isimlerine göre alfabetik olarak sıralamak isterseniz, sort() önceki bölümdeki işlev, ilgili anahtarların kaybolmasına neden olacaktır.

Gördüğünüz gibi, sadece insanların en sevdikleri meyvelerle olan ilişkisini değil, farklı insanların isimlerini de kaybettik. Sıralanan her değere, sıralanan dizideki konumuna göre yeni bir sayısal dizin atanmıştır.

Bu sorunu kolayca çözmenize yardımcı olmak için PHP, dizileri değerlerine göre sıralarken anahtar-değer ilişkisini koruyan iki farklı işleve sahiptir. Bu iki fonksiyon asort() ve arsort(). Aşağıdaki kod parçacığı aynı sıralar $fruit_preferences dizi ama kullanır asort() böyle yaparak.

Yukarıdaki örnekten de anlaşılacağı gibi, değer Elma ile ilişkisini sürdürürken zirveye tırmanır. Patricia. Meyve adları, aşağıdakiler kullanılarak kolayca tersine sıralanabilir. arsort() işlev.

Bu işlevlerin her ikisi de, isteğe bağlı ikinci parametrelerinin değeri olarak aynı sıralama işaretlerini kabul eder. sort() ve rsort().

Kullanıcı Tanımlı İşlevlerle Dizi Öğelerini Değere Göre Sıralama

Dört sıralama işlevi, farklı bayrakların yardımıyla genel sıralama ihtiyaçlarınızı kolayca karşılayabilir. Ancak bazen dizi öğelerini karşılaştırma kriterleriniz farklı olabilir.

Diyelim ki alfabetik olarak sıralanması gereken bir dizi rastgele kelimeniz var. Ancak, bunları alfabetik olarak sıralamadan önce uzunluklarına göre de sıralamak istersiniz. Örneğin, hayvanat bahçesi sonra gelirdi elma geleneksel alfabetik sıralamada. Ancak kısa kelimeleri uzun kelimelerden önce göstermek isterseniz, hayvanat bahçesi önce görünecek elma. Aynı harf dizisinde, maymun önce gelirdi hayvanat bahçesi Alfabetik sıralama nedeniyle.

Temel olarak kelimeler önce uzunluklarına göre sıralanır, daha sonra aynı sayıda harfe sahip kelimeler kendi grupları içinde alfabetik olarak sıralanır. Bu tür sıralama PHP’de yerleşik değildir, bu yüzden kendi sıralama işlevimizi yazmamız gerekecek.

Bu durumda PHP’nin yaptığı şey, sıralamak istediğiniz diziyi kendi sıralama fonksiyonunuzun adıyla birlikte iletmek için kullanılabilecek birkaç fonksiyon sağlamaktır.

kullanabilirsiniz usort() işlev dizi değerlerini normal dizilerde sıralamak için. Benzer şekilde, kullanabilirsiniz uasort() anahtar-değer ilişkilerini korurken, ilişkisel dizilerdeki değerleri sıralama işlevi.

Aşağıdaki kod parçacığı, bu davranışı gerçekleştirmenin bir yolunu gösterir.

Özel sıralamaya yönelik geri arama işlevlerinde, ilk değerin ikinciden daha küçük olduğunu belirtmek için 0’dan küçük bir tamsayı döndürmemiz gerekir. İlk değer ikinciye eşitse 0 döndürün. İlk değer saniyeden büyükse 0’dan büyük bir tamsayı döndürün.

Birincil sıralama ölçütümüz dize uzunluğu olduğundan, ilk sözcük ikinciden kısaysa doğrudan -1 döndürürüz. Benzer şekilde, ilk kelime ikinciden uzunsa doğrudan 1 döndürürüz. İki kelimenin uzunluğu eşitse, bunları kullanarak alfabetik olarak karşılaştırırız. en strcmp() işlev ve değerini döndürür.

Çıktıda görebileceğiniz gibi, özel sıralama işlevimiz kelimeleri tam olarak istediğimiz şekilde yeniden sıralar.

Diziyi Anahtara Göre Sıralama

Bir diziyi anahtarlarına göre sıralamak, ilişkisel dizilerle uğraşırken genellikle yararlıdır.

Örneğin, toplam hakkında bilgi içeren bir diziniz olabilir. çeşitli ülkelerdeki havaalanlarının sayısı. Farklı ülkelerin adlarının anahtar, havaalanlarının numaralarının ise değer olduğunu varsayarsak, ülke adlarını alfabetik olarak sıralamak isteyebilirsiniz. ile bunu yapmak çok kolay ksort() ve krsort() fonksiyonlar. Bu işlevlerin her ikisi de sıralamadan sonra dizi öğelerinin anahtar-değer ilişkisini sürdürecektir. bu ksort() işlevi, tuşları düşükten yükseğe doğru sıralar ve krsort() tuşları yüksekten düşüğe sıralar.

İşte temel bir sıralama örneği:

Ayrıca, dizi anahtarlarını sıralamak için PHP’ye kendi özel işlevinizi de sağlayabilirsiniz. uksort() işlev. Tıpkı usort()geri arama işlevi uksort() ayrıca, ilk anahtar ikinciden küçük olarak kabul edilirse 0’dan küçük bir tamsayı ve birinci anahtar saniyeden büyükse 0’dan büyük bir tamsayı döndürmenizi gerektirir. Bu işlev ayrıca dizi öğelerinin anahtar-değer ilişkisini de korur.

Yukarıdaki örnekte, ülkelerin adlarını önce adlarının uzunluğuna göre sonra alfabetik olarak sıralamak için önceki bölümdeki özel sıralama işlevini kullandık.

PHP’de Çok Boyutlu Dizileri Sıralama

Çok boyutlu bilgilerle uğraşmak gerçek hayatta çok daha yaygındır. Örneğin kurumlar, her ders için yeni tablo oluşturmak yerine, çeşitli derslerdeki tüm öğrencilerin notlarını tek bir tabloda saklayacak. Aynı bilgiyi PHP’de saklamanız gerekiyorsa, bunu her konu için ayrı bir dizi yerine çok boyutlu bir dizi kullanarak yapmayı da tercih edersiniz.

Kullanıcı Tanımlı İşlevlerle Sıralama

Bu eğitimde, çok boyutlu bir diziyi bir dizi kullanarak nasıl sıralayacağımızı öğreneceğiz. dünyanın en yüksek binaları Örnek olarak. Dizimiz, binanın adı, bulunduğu şehir ve ülke, kat sayısı ve toplam yüksekliği metre cinsinden, yapıldığı yıl ile ilgili bilgileri içerecektir.

Çok boyutlu bir dizideki değerleri belirli bir alana göre sıralamak istediğinizde, usort() işlev. Aşağıdaki örnek, bu tekniği daha iyi anlamanıza yardımcı olacaktır.

Yukarıdaki örnekte, her bina ile ilgili bilgiler ana bina içinde kendi dizisinde saklanmaktadır. $tallest_buildings dizi. bu storey_sort() fonksiyonu, kriterlerimize göre hangi binanın daha küçük olduğunu belirlemek için ikinci binadaki kat sayısını birinciden çıkarır. Belirli bir negatif veya pozitif değer döndürme konusunda endişelenmemize gerek yok çünkü tüm negatif değerler daha küçük ve tüm pozitif değerler daha büyük anlamına gelir.

Sonunda, sadece ana diziyi yineliyoruz ve her bina hakkında bilgi yazdırıyoruz.

Birden Çok Sütun Üzerinde Sıralama

adında bir fonksiyon var array_multisort() çok boyutlu dizinizi birden çok sütun veya boyutun değerlerine göre sıralamak için kullanabilirsiniz. Sıralama için kullanmak istediğiniz anahtar değerlerin bir dizisini oluşturmanız yeterlidir. Bundan sonrası sadece sıralama bayraklarını geçmek meselesidir.

Aşağıdaki örnek bunu netleştirecektir:

depolayan çok boyutlu bir dizimiz var. isim, Puan ve sağlık oyuncuların kullanıyoruz array_column() adlı iki ayrı dizi oluşturma işlevi $p_score ve $p_health oyuncuların puanını ve sağlığını saklar.

Dizilerin aktarıldığı sıraya dikkat edin. array_multisort() işlev. Bunun nihai sonuç üzerinde bir etkisi olacaktır. biz geçiyoruz $p_score önce dizi ve içindeki değerler $p_score azalan düzende sıralanacaktır. Bu koyacak Amanda en yüksek puana sahip olduğu için en üstte. Şimdi dizilerdeki elemanlar $p_health ve $players Amanda’nın sağlığı en üstte olacak şekilde yeniden düzenlenecek $p_health ve o zirvede $players.

Diğer bir deyişle, array_multisort() bütünü sıralayacak $p_score azalan sırada dizi. Daha sonra diğer dizilerdeki değerler de bu sıraya uyacak şekilde yeniden düzenlenecektir. Yani, sipariş olacak Amanda, Andrew, Adem, Montyvb..

Bütünü geçtikten sonra $p_score diziye geçecek $p_health dizi. fark edeceksiniz ki hem Adem ve Monty aynı puana sahip. Böylece, nihai konumları, artan düzende sıralanması gereken sağlık değerlerine göre belirlenecektir. Monty daha düşük sağlığa sahip Adem bu yüzden önce yerleştirilecek Adem. Oyuncuların sırası şimdi olacak Amanda, Andrew, Monty, Ademve benzeri.

Diğer tüm değer çakışmaları benzer şekilde çözülür. Diziyi sıraladıktan sonra alacağınız nihai sonuç:

Şimdiye kadar belli olmuş olabilir ama yine de belirtmek isterim ki array_multisort() birden fazla kaydetmenize yardımcı olmaz sort() ayrı diziler için çağrılar. İşte bir örnek:

Amacınız her iki diziyi de bağımsız olarak artan düzende sıralamaksa, o zaman array_multisort() seni fena halde hayal kırıklığına uğratacak. Bu durumda yapabileceğiniz en iyi şey basitçe aramaktır. sort() her iki dizide de ayrı ayrı.

Son düşünceler

Bu öğreticide, dizileri anahtarlarına veya değerlerine göre sıralamak için kullanılabilecek PHP’de bazı farklı işlevler gösterdim. Ayrıca, kendi özel sıralama ölçütlerimizi kullanarak bir diziyi anahtarlarına veya değerlerine göre sıralamayı da öğrendik. uksort() ve uasort() fonksiyonlar. Son bölüm, yalnızca belirli bir alan kullanılarak çok boyutlu bir dizideki tüm değerlerin nasıl sıralanacağını tartıştı.

Umarım bu eğitimden yeni bir şeyler öğrenmişsinizdir. Herhangi bir sorunuz veya öneriniz varsa, lütfen yorumlarda bana bildirin. Öğrenmenin en iyi yolu, bu işlevleri kullanarak dizileri sıralayarak kendinize ait bazı örnekler oluşturmaya çalışmaktır.

Bu gönderi, şu kişilerin katkılarıyla güncellendi: Monty Shokeen. Monty, öğreticiler yazmayı ve yeni JavaScript kitaplıkları hakkında bilgi edinmeyi seven tam donanımlı bir geliştiricidir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.