2010-07-15 4 views
9

तुलना ऑपरेटर < <= > >= स्ट्रिंग के लिए भी लागू किया जा सकता है। तो हमें स्ट्रिंग तुलना के लिए विशेष फ़ंक्शन की आवश्यकता क्यों है: strcmp?PHP: हमें स्ट्रिंग तुलना फ़ंक्शन की आवश्यकता क्यों है?

+2

मैंने अनुमान लगाया होगा कि आप उस फ़ंक्शन में स्वयं का तुलनित्र या लोकेल प्रदान कर सकते हैं ... लेकिन नहीं, यह बाइनरी-सुरक्षित होने के बावजूद केवल सादा पुराना सी लाइब्रेरी फ़ंक्शन है। तो हो सकता है कि PHP को पोर्टिंग सी कोड को कम करने के लिए ... क्योंकि यह स्पष्ट रूप से हर समय होता है। – Joey

उत्तर

13

क्योंकि वहाँ कई रूप हैं:

समारोह के आधार पर, इन सवालों के जवाब अलग-अलग हो:

  • यह केस संवेदी है? (strcmp बनाम strcasecmp, strnatcmp बनाम strnatcasecmp)
  • निर्भर करता है कि यह लोकेल पर निर्भर करता है? (strcoll करता है)
  • क्या मैं एक संयोजन निर्दिष्ट कर सकता हूं? (strcollsetlocale से प्रभावित होता है)

Additionaly, तुलना ऑपरेटर भी true या false दे। strcmp एक पूर्णांक देता है ताकि यह एक साथ एन्कोड कर सके कि पहचान (वापसी 0) है या यदि यह नहीं है, जो बड़ा है (इस पर निर्भर करता है कि मूल्य सकारात्मक या नकारात्मक है या नहीं)।

+0

क्या '===' हालांकि कोई अंतर है? –

+0

यदि दोनों ऑपरेटिंग तार हैं, और 'strcmp' के विशिष्ट मामले में, मुझे नहीं लगता कि कोई अंतर है, नहीं। – Artefacto

+0

@ पेका हाँ, वे दोनों memcmp पर भरोसा करते हैं। बस अंतर एक सही/गलत, अन्य किसी भी पूर्णांक रिटर्न है। – Artefacto

3

हालांकि strcmp के लिए PHP में कोई भार के, 3 विभिन्न मूल्यों बराबरी के लिए कम, की तुलना में 0 के लिए -1 और तुलना स्ट्रिंग से अधिक के लिए +1 में strcmp परिणाम नहीं हैं। < = <= > >= के साथ आपको (कभी-कभी) करने के लिए कई चेक एक के बाद एक होगा।

+1

यह केवल -1, 1 और 0. – Artefacto

+0

नहीं लौटाता है और जब तक कि आप किसी प्रकार की लुकअप टेबल को लागू नहीं करते हैं, तब तक आप सबसे खराब मामले के साथ दो तुलनाओं को समाप्त कर देंगे। – Artefacto

+0

एआरएम, 'strcmp' का उपयोग बहुत अधिक तरीके से किया जाता है, सिवाय इसके कि आप तुलना ऑपरेटर लेते हैं और इसे' 0' पर लागू करते हैं। तो '$ a <$ b'' strcmp ($ a, $ b) <0' बन जाता है - वही '==',' <=', '> 'और '> =' के लिए जाता है। – Joey