PHP 7+
PHP 7 itibaren bu kısaca kullanılarak yapılabilir usortbir ile anonim fonksiyonu kullanan uzay gemisi operatörü eleman karşılaştırmak.
Bunun gibi artan bir sıralama yapabilirsiniz:
usort($inventory, function ($item1, $item2) {
return $item1['price'] <=> $item2['price'];
});
Veya bunun gibi azalan bir sıralama:
usort($inventory, function ($item1, $item2) {
return $item2['price'] <=> $item1['price'];
});
Bunun nasıl çalıştığını anlamak için, usortaşağıdaki gibi davranması gereken kullanıcı tarafından sağlanan bir karşılaştırma işlevini aldığını unutmayın (dokümanlardan):
İlk bağımsız değişken, ikinciden sırasıyla küçük, eşit veya büyük olarak kabul edilirse karşılaştırma işlevi sıfırdan küçük, eşit veya sıfırdan büyük bir tamsayı döndürmelidir.
Ve ayrıca <=>, uzay gemisi operatörünün,
her iki işlenen eşitse 0, sol büyükse 1 ve sağ büyükse -1 döndürür
tam da neye usortihtiyacı var. Aslında, neredeyse eklemek için verilen tüm gerekçesi <=>de dile https://wiki.php.net/rfc/combined-comparison-operator öyle mi
ile kullanmak için yazma sipariş geri çağrıları usort()kolaylaştırır
PHP 5.3 ve üstü
PHP 5.3 anonim işlevler getirdi, ancak henüz uzay gemisi operatörü yok. usortDizimizi sıralamak için hala kullanabiliriz , ancak biraz daha ayrıntılı ve anlaşılması daha zor:
usort($inventory, function ($item1, $item2) {
if ($item1['price'] == $item2['price']) return 0;
return $item1['price'] < $item2['price'] ? -1 : 1;
});
Not sadece değerlerin farkını dönmek için tamsayı değerleri ile uğraşan Karşılaştırıcıların için oldukça yaygın bir kullanımdır gibi o $item2['price'] - $item1['price'], biz olamaz güvenli bir biçimde yapmanın bu durumda. Bunun nedeni, fiyatların soru sorucunun örneğindeki kayan nokta sayılarıdır, ancak geçirdiğimiz karşılaştırma işlevinin düzgün çalışması usortiçin tamsayılar döndürmesi usortgerekir:
Geri dönen tamsayı olmayan örneğin kayan nokta olarak, karşılaştırma fonksiyonunun değerleri, geri dönüş değeri tam sayı için bir iç döküm neden olur. Dolayısıyla, 0,99 ve 0,1 gibi değerlerin her ikisi de, 0 gibi bir tamsayı değerine dönüştürülür ve bu değerler eşit olarak karşılaştırılır.
Bu usortPHP 5.x kullanırken akılda tutulması gereken önemli bir tuzaktır ! Bu cevabın orijinal versiyonum bu hatayı yaptı ve yine de ciddi bir hatayı fark etmeden görünüşe göre binlerce görüşe on upvot aldım. Beni karşılaştırıcı fonksiyonları berbat edebilir gibi kolaylığı hangi ile lackwits kesin kolay kullanımlı uzay gemisi operatörü PHP 7'de dile eklendiği sebep.