PHP 7+
PHP 7 के रूप में, यह तत्वों की तुलना करने के लिए स्पेसशिप ऑपरेटर का उपयोग usort
करने वाले एक अनाम फ़ंक्शन का उपयोग करके संक्षिप्त रूप से किया जा सकता है ।
आप इस तरह एक आरोही प्रकार कर सकते हैं:
usort($inventory, function ($item1, $item2) {
return $item1['price'] <=> $item2['price'];
});
या इस तरह एक अवरोही क्रम:
usort($inventory, function ($item1, $item2) {
return $item2['price'] <=> $item1['price'];
});
यह समझने के लिए कि यह कैसे काम करता है, ध्यान दें कि usort
उपयोगकर्ता द्वारा प्रदान किए गए तुलनात्मक फ़ंक्शन को निम्नानुसार व्यवहार करना चाहिए (डॉक्स से):
तुलनात्मक फ़ंक्शन को पूर्णांक को शून्य से अधिक या शून्य से अधिक वापस करना होगा यदि पहले तर्क को क्रमशः से कम, दूसरे के बराबर या उससे अधिक माना जाता है।
और यह भी ध्यान दें कि <=>
, अंतरिक्ष यान ऑपरेटर,
रिटर्न 0 अगर दोनों ऑपरेंड बराबर हैं, 1 अगर लेफ्ट ज्यादा है, और -1 अगर राइट ज्यादा है
जो वास्तव में क्या usort
जरूरत है वास्तव में, https://wiki.php.net/rfc/combined-comparison-operator<=>
में भाषा को जोड़ने के लिए दिया गया लगभग पूरा औचित्य यह है कि
usort()
आसान के साथ उपयोग के लिए लेखन आदेश कॉलबैक बनाता है
PHP 5.3+
PHP 5.3 ने अनाम फ़ंक्शंस पेश किए, लेकिन अभी तक स्पेसशिप ऑपरेटर नहीं है। हम usort
अपने एरे को सॉर्ट करने के लिए अभी भी उपयोग कर सकते हैं , लेकिन यह थोड़ा और क्रिया है और समझने में कठिन है:
usort($inventory, function ($item1, $item2) {
if ($item1['price'] == $item2['price']) return 0;
return $item1['price'] < $item2['price'] ? -1 : 1;
});
ध्यान दें कि हालांकि पूर्णांक मानों से निपटने वाले तुलनित्रों के लिए यह काफी सामान्य है कि वे मूल्यों का अंतर लौटाएं, जैसे $item2['price'] - $item1['price']
, हम इस मामले में सुरक्षित रूप से ऐसा नहीं कर सकते । ऐसा इसलिए है क्योंकि प्रश्न पूछने वाले के उदाहरण में कीमतें अस्थायी संख्या में हैं, लेकिन काम करने के usort
लिए पूर्णांक को वापस करने के लिए हमारे पास होने वाले तुलनात्मक कार्य usort
:
रिटर्निंग गैर पूर्णांक इस तरह नाव के रूप में तुलना समारोह से मूल्यों,, कॉलबैक द्वारा दिया गया मान के पूर्णांक के लिए एक आंतरिक कलाकारों का परिणाम देगा। तो 0.99 और 0.1 जैसे मान दोनों को 0 के पूर्णांक मान पर कास्ट किया जाएगा, जो इस तरह के मूल्यों की तुलना करेगा।
यह usort
PHP 5.x में उपयोग करते समय ध्यान में रखने के लिए एक महत्वपूर्ण जाल है ! इस जवाब के मेरे मूल संस्करण ने यह गलती की और फिर भी मैंने हजारों बगलों में से दस अपवित्रों को अर्जित किया, जो बिना किसी गंभीर बग को देखे किसी को भी प्रकट नहीं हुए। कितनी आसानी से lackwits की तरह मुझे तुलनित्र कार्यों को पेंच कर सकते हैं ठीक कारण यह है कि आसान से उपयोग अंतरिक्ष यान ऑपरेटर पीएचपी 7 में भाषा को जोड़ा गया है।