2010-07-15 30 views
9

Karşılaştırma işleçleri < <= > >= dizeleri için de uygulanabilir. O zaman neden dize karşılaştırması için özel fonksiyona ihtiyacımız var: strcmp?PHP: Neden string karşılaştırma fonksiyonuna ihtiyacımız var?

+2

Bu işleve kendi karşılaştırıcısını veya yerel ayarını sağlayabileceğinizi tahmin etmeliydim ... ama hayır, yalnızca eski C kütüphanesi işlevi, ikili güvenli de olsa. Bu yüzden belki de C kodunun PHP'ye aktarılmasını kolaylaştırmak ... çünkü görünüşe göre her zaman oluyor. – Joey

cevap

13

çeşitli varyasyonları olduğundan:

işlevine bağlı olarak, bu soruların cevabı değişir: Bu harf duyarlı

Ek olarak, karşılaştırma operatörleri de true veya false vermek (strcollsetlocale etkilenir). strcmp bir tamsayı verir, böylece eşzamanlı olarak kimlik olup olmadığına (dönüş 0) veya eğer değilse, daha büyük olana (değerin pozitif mi yoksa negatif mi olduğuna bağlı olarak) kodlayabilir.

+0

Yine de bir fark var mı? –

+0

Her iki işlenen dizge de dizeyse ve 'strcmp' özel durumunda, bir fark olduğunu düşünmüyorum, hayır. – Artefacto

+0

@Peka Evet, ikisi de memcmp'e güveniyorlar. Biri gerçek/yanlış, diğeri tamsayı döndüren farktır. – Artefacto

3

strcmp PHP hiçbir aşırı yükler, 3 farklı değerler eşittir için daha az, daha 0 -1 karşılaştırıldı dize daha fazla +1 olarak strcmp sonuç olsa da. < = <= > >= ile (bazen) çoklu çek birbiri ardına yapabileceksiniz.

+1

Yalnızca -1, 1 ve 0'a dönmez. – Artefacto

+0

Ve bir çeşit arama tablosunu uygulamadığınız sürece, en kötü ihtimalle iki karşılaştırma ile sonuçlanırsınız. – Artefacto

+0

Erm, 'strcmp' hemen hemen aynı şekilde kullanılır, ancak karşılaştırma operatörünü alıp' 0'na uygulamanız dışında. Yani, $ a <$ b ', strcmp ($ a, $ b) <0 'olur - aynı,' == ',' <=', '> 've'> = 'için de geçerlidir. – Joey

İlgili konular