পিএইচপি 7+
পিএইচপি 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 প্রদান করে returns
যা ঠিক তাই usortপ্রয়োজন। প্রকৃতপক্ষে, https://wiki.php.net/rfc/combined-compistance-operator<=> এ ভাষা যুক্ত করার জন্য প্রায় সম্পূর্ণ ন্যায্যতা এটি
usort()সহজ সঙ্গে ব্যবহারের জন্য কলিং অর্ডার কলব্যাক করে তোলে
পিএইচপি 5.3+
পিএইচপি 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 এর পূর্ণসংখ্যার মান হিসাবে ফেলে দেওয়া হবে যা এই জাতীয় মানকে সমান হিসাবে তুলনা করবে।
usortপিএইচপি 5.x ব্যবহার করার সময় এটি মনে রাখার একটি গুরুত্বপূর্ণ ফাঁদ ! আমার এই উত্তরের মূল সংস্করণটি এই ভুল করেছে এবং তবুও আমি গুরুতর ত্রুটি না দেখে কারও কাছে দৃশ্যত কয়েক হাজার ভিউ ধরে দশটি আপগ্রেট অর্জন করেছি। স্বচ্ছন্দে সঙ্গে যা lackwits মত আমার comparator ফাংশন স্ক্রু আপ করতে পারেন অবিকল কারণ সহজ-থেকে-ব্যবহার মহাকাশযান অপারেটর পিএইচপি 7 ভাষা যোগ করা হয়েছিল।