2015-11-26 18 views
5

PHP'de usort işlevi iki argüman alır: sıralanacak dizi ve geri arama. Geri arama iki argüman da alır: $ a ve $ b. Sonra, bu ikisini istediğimiz şekilde karşılaştırırız. Beni her zaman şaşırtıyor, çünkü usort için bu durum çok yaygın değil. Genellikle değerleri aynı mülke göre sıralar ya da hem $ a hem de $ b için aynı mantığı kullanarak yaparız.PHP'de basit kullanım var mı?

$animals = ['dog', 'tiger', 'giraffe', 'bear']; 

usort($animals, function ($a, $b) { 
    return strlen($a) - strlen($b); 
}); 

çalışacak Yani, ama biz iki kez strlen söylemek gerekir: Örneğin, uzunluk göre sıralamak istiyorum.

usort($animals, function ($element) { 
    return strlen($element); 
}); 

Hatta böyle: O bu şekilde söylemek güzel olurdu

usort($animals, 'strlen'); 

Kendimi (PHP 7 güzellikler kullanarak fonksiyonun bu tür yazdım, ancak kolayca değiştirilebilir PHP 5):

function simple_usort(array &$array, callable $callback): bool 
{ 
    return usort($array, function ($a, $b) use ($callback) { 
     return $callback($a) <=> $callback($b); 
    }); 
} 

Mükemmel çalışıyor, ancak PHP'de zaten başka bir işlevde bulunmuyor mu? Değilse, neden PHP bu çok popüler ve uygun bir sıralama yöntemini desteklemiyor?

+3

Son bölüm için, php grubunu bize sormak isteyebilirsiniz ... lol – Andrew

+0

Daha önce hiç kullanmamıştım ve buna baktığımda, geri arama fonksiyonu ile biraz kafam karışmış durumda. $ A'nın strlen'i 3'tür ve $ b'nin strlen'i 5'dir. Yani 3-5 -2'dir? $ A ve $ b'yi sıralamak için -2 sayısını nasıl kullanır? Üzgünüm, burada soruları soran sizsiniz, ama ben sadece merak ediyorum. – frosty

+0

@Andrew Haklısınız, ama eminim ki bir şeyleri kaçırmıyorum. Burada "neden" demek "Bir şeyi özlüyorum mu?" –

cevap

2

Mükemmel çalışıyor, ancak PHP'de zaten başka bir işlevde bulunmuyor mu?

Değilse

, neden PHP sıralama oldukça popüler olan bu ve uygun bir yol desteklemiyor sayılı?

Bir dil veya popüler olabilir veya olmayabilir bazı kullanım durumları karşılamak üzere çok sayıda işleve sağlamadan halletmek için jenerik araçları sağlamak üzere tasarlanmış olmalıdır ki performansını olumsuz olarak etkilenmez verilmiş böyle bir karar.

+0

Eh, PHP bahsettiğimden çok daha egzotik fonksiyonlar sağlar. Tek başına diziler PHP'de, bazıları da jenerik olmayan fonksiyonlar inşa etmişlerdir. –

+0

@RoboRobok Evet, php'nin bu dil tasarımının en iyi uygulamalarının bazılarını ihlal ettiği kısmı çıkarmaya dikkat ettim ;-) –

0

Basit cevap: Kimsenin istemediği ve hiç kimsenin uygulayamadığı için. PHP, bir yamaya sahip olan ya da başkalarını bir yama yazması için motive eden insanlar tarafından yönlendirilir. Bir özellik hiç kimse için zor değilse, talep edilmez ve uygulanmaz.

İstediğiniz özellik çok özel ve kazancın çok küçük olduğuna inanıyorum.

Ancak isterseniz: bugs.php.net adresinden bir özellik isteği ekleyin veya github yoluyla bir yama önerisinde bulunun.

İlgili konular