यह इसलिए होता है क्योंकि क्रमबद्ध सरणी पर और परिणाम सब लगातार मूल्यों है कि यह के बराबर की तुलना से छोड़कर प्रत्येक मान के लिए द्वारा first sorting the values as strings, तो iteratingarray_unique
काम करता है।
उपरोक्त तुलनात्मक "बराबर" के लिए तुलनात्मक कार्य दूसरे पैरामीटर के अनुसार चुना गया है, जो SORT_REGULAR
==
के साथ समानता जांच के समान है।
यह व्यवहार पूरी तरह से गॉथस को जन्म देता है। चूंकि सॉर्ट क्विकॉर्ट है, यह अस्थिर है। इसलिए 1
और '1'
दोनों में एक सरणी सॉर्ट करना कोई गारंटी नहीं देता है कि परिणाम में पहला कौन सा होगा। इसका मतलब है कि कुछ मामलों में array_unique
कुछ मामलों में 1
मनमाने ढंग से "पसंद" और '1'
दिखाई दे सकता है।
जारी है हालांकि पागलपन: विचार है कि यदि प्रकार का उत्पादन [1, '1', '1a']
तो '1a'
नहीं परिणाम में शामिल किया जाएगा, जबकि अगर तरह का उत्पादन ['1', 1, '1a']
तो यह शामिल किया जाएगा (यह होता है (यह 1
के बराबर तुलना) स्ट्रिंग '1'
के बराबर तुलना नहीं करें)!
क्या यह पुनरावृत्ति केवल एक बार होता है? क्योंकि तब हमें डुप्लिकेट मान प्राप्त करना चाहिए यदि '5' –
@OneTrickPony के बाद कोई अन्य' 1' शामिल किया गया है: मैंने स्पष्ट रूप से उल्लेख नहीं किया है कि सरणी पहले क्रमबद्ध है (दस्तावेज़ीकरण करता है)। लेकिन दूसरे विचार पर यह काफी महत्वपूर्ण है क्योंकि क्रम स्थिर नहीं है (quicksort), तो मुझे थोड़ा सा जवाब विस्तारित करने दें। – Jon
@OneTrickPony: असल में यह मेरे विश्वास से थोड़ा अलग काम करता है - और शायद आपको यह जानकर आश्चर्य नहीं होगा कि इस तरह के मामलों में व्यवहार की भविष्यवाणी नहीं की जा सकती है, ठीक है, PHP। – Jon