PHP Array Sorting Functions
PHP Array Sorting Functions Part-2: PHP array asort, arsort and uasort function
PHP সহ যেকোনো Language এই Sorting একটি গুরুত্বপূর্ণ বিষয়, আজকের পর্বে আমরা PHP Language এর Built-in Sorting Function গুলোর মধ্যে asort, arsort, and uasort এই Function গুলো নিয়ে আলোচনা করব।
PHP asort() Function
আমরা ইতিপূর্বে দেখেছি PHP তে array এর value গুলোকে sort() function দিয়ে sorting করলে তার default index গুলো নষ্ট হয়ে যায়। তবে index ঠিক রেখে ascending order এ সাজানোর জন্য asort() function টি ব্যবহৃত হয়।
PHP asort() function syntax()
asort(array &$array, int $flags = SORT_REGULAR): true
Parameters:
- $array: এখানে input array টি থাকবে।
- flags: optional second parameter টি flags এই মানগুলি ব্যবহার করে সাজানোর আচরণ পরিবর্তন করতে ব্যবহার করা যেতে পারে:
Sorting type flags:
- SORT_REGULAR – সাধারণভাবে আইটেম তুলনা করে ;
- SORT_NUMERIC – আইটেমগুলিকে numerically তুলনা করে ৷
- SORT_STRING – আইটেমগুলিকে string হিসেবে তুলনা করে।
- SORT_LOCALE_STRING – setlocale() current locale এর উপর ভিত্তি করে আইটেমগুলিকে স্ট্রিং হিসাবে তুলনা করে । এটি setlocale()ব্যবহার করে পরিবর্তন করা যেতে পারে
- SORT_NATURAL – natsort() এর মত “natural ordering” ব্যবহার করে আইটেমগুলিকে স্ট্রিং হিসাবে তুলনা করে।
- SORT_FLAG_CASE – case-insensitively স্ট্রিংগুলি সাজানোর জন্য SORT_STRING বা SORT_NATURAL এর সাথে (বিটওয়াইজ বা) একত্রিত করা যেতে পারে
PHP asort ফাংশন কিভাবে কাজ করে?
PHP -তে asort ফাংশন কীভাবে কাজ করে তার একটি pseudocode উপস্থাপনা এখানে দেওয়া হলো:
Function asort(inputArray, sortFlags) Create a copy of the inputArray called sortedArray if sortFlags is specified, apply the specified sorting rules to sortedArray for each pair (key, value) in sortedArray store the original key-value association in a temporary variable find the position where the temporary variable's value should be inserted in sortedArray by comparing it to the values of already sorted elements insert the temporary variable at the determined position in sortedArray, maintaining the key-value association replace the values in inputArray with the values in sortedArray while preserving the keys return the sorted inputArray End Function
এই সিউডোকোডে, আমরা প্রথমে ইনপুট অ্যারের একটি কপি তৈরি করি, original key-value অ্যাসোসিয়েশনগুলি সংরক্ষণ করার সময় এটিকে মানগুলির উপর ভিত্তি করে বাছাই করি এবং তারপরে কপি থেকে সাজানো মানগুলির সাথে ইনপুট অ্যারের মানগুলি প্রতিস্থাপন করি। SortFlags প্যারামিটারটি ঐচ্ছিক এবং সাজানোর অপশন গুলি নির্দিষ্ট করতে ব্যবহার করা যেতে পারে।
নিচের উদাহরণ দেখুন :
<?php $fruits = array("d"=>"lemon","a"=>"orange","b"=>"banana","e"=>"apple"); asort($fruits); echo "<pre>"; print_r($fruits); echo "</pre>"; ?>
Output
Array ( [e] => apple [b] => banana [d] => lemon [a] => orange )
এখানে পিএইচপি-তে asort ফাংশনের ব্যবহারিক ব্যবহারের আরো একটি উদাহরণ দেওয়া হলো :
ধরা যাক আপনার কাছে ছাত্রদের গ্রেডের উপর ভিত্তি করে একটি associative array আছে, এবং আপনি key হিসাবে তাদের নাম বজায় রেখে ascending order এ শিক্ষার্থীদের গ্রেড অনুসারে সাজাতে চান:
// Sample associative array of student grades $studentGrades = array( 'Alice' => 90, 'Bob' => 78, 'Charlie' => 95, 'David' => 82, 'Eve' => 88 ); // Use asort to sort the array by grades in ascending order asort($studentGrades); // Now $studentGrades is sorted by grades while maintaining the association with student names foreach ($studentGrades as $name => $grade) { echo $name . ": " . $grade . "\n"; }
Output:
Bob: 78 Eve: 88 David: 82 Alice: 90 Charlie: 95
এই উদাহরণে, asort ফাংশন $studentGrades অ্যারেকে ছাত্রের গ্রেডের উপর ভিত্তি করে ascending order এ সাজায় যখন student names (keys) এবং তাদের grades (values) মধ্যে সম্পর্ক রক্ষা করে। এটি তাদের গ্রেডের উপর ভিত্তি করে শিক্ষার্থীদের র্যাঙ্ক করা তালিকা প্রদর্শনের জন্য উপযোগী হতে পারে।
নিম্নে natural order এ book title গুলির একটি associative array সাজানোর জন্য PHP-তে asort সহ SORT_NATURAL এবং SORT_FLAG_CASE flag ব্যবহার করে এখানে একটি বাস্তব উদাহরণ রয়েছে:
<?php // Sample associative array of book titles $bookTitles = array( 'Book_1'=>'catching fire', 'Book_2'=>'The Hunger Games', 'Book_3'=>'mockingjay', 'Book_4'=>'The Hobbit', 'Book_5'=>'The Lord of the Rings', ); // Use asort with SORT_NATURAL flag to sort the array asort($bookTitles, SORT_NATURAL|SORT_FLAG_CASE); // Now $bookTitles is sorted in natural order foreach ($bookTitles as $bookNo=>$title) { echo "$bookNo:$title" . "\n"; }
Output
Book_1:catching fire Book_3:mockingjay Book_4:The Hobbit Book_2:The Hunger Games Book_5:The Lord of the Rings
PHP arsort() Function
PHP তে arsort টি ও asort এর মতোই index ঠিক রেখে Sorting করে , তবে এটি ascending order এর পরিবর্তে Descending Order এ array এর value গুলোকে Sorting করে ।
PHP arsort() function syntax()
arsort(array &$array, int $flags = SORT_REGULAR): true
Parameters:
- $array: এখানে input array টি থাকবে।
- flags: optional second parameter টি flags এই মানগুলি ব্যবহার করে সাজানোর আচরণ পরিবর্তন করতে ব্যবহার করা যেতে পারে:
Sorting type flags:
- SORT_REGULAR – সাধারণভাবে আইটেম তুলনা করে ;
- SORT_NUMERIC – আইটেমগুলিকে numerically তুলনা করে ৷
- SORT_STRING – আইটেমগুলিকে string হিসেবে তুলনা করে।
- SORT_LOCALE_STRING – setlocale() current locale এর উপর ভিত্তি করে আইটেমগুলিকে স্ট্রিং হিসাবে তুলনা করে । এটি setlocale()ব্যবহার করে পরিবর্তন করা যেতে পারে
- SORT_NATURAL – natsort() এর মত “natural ordering” ব্যবহার করে আইটেমগুলিকে স্ট্রিং হিসাবে তুলনা করে।
- SORT_FLAG_CASE – case-insensitively স্ট্রিংগুলি সাজানোর জন্য SORT_STRING বা SORT_NATURAL এর সাথে (বিটওয়াইজ বা) একত্রিত করা যেতে পারে
PHP arsort ফাংশন কিভাবে কাজ করে?
পিএইচপি-তে arsort ফাংশন কীভাবে কাজ করে তার একটি pseudocode উপস্থাপনা এখানে দেওয়া হলো:
Function arsort(inputArray, sortFlags) Create a copy of the inputArray called sortedArray if sortFlags is specified, apply the specified sorting rules to sortedArray for each pair (key, value) in sortedArray store the original key-value association in a temporary variable find the position where the temporary variable's value should be inserted in sortedArray by comparing it to the values of already sorted elements insert the temporary variable at the determined position in sortedArray, maintaining the key-value association replace the values in inputArray with the values in sortedArray while preserving the keys return the sorted inputArray in descending order End Function
এই সিউডোকোডে, আমরা প্রথমে ইনপুট অ্যারের একটি কপি তৈরি করি, original key-value অ্যাসোসিয়েশনগুলি সংরক্ষণ করার সময় এটিকে মানগুলির উপর ভিত্তি করে বাছাই করি এবং তারপরে কপি থেকে সাজানো মানগুলির সাথে ইনপুট অ্যারের মানগুলি প্রতিস্থাপন করি। SortFlags প্যারামিটারটি ঐচ্ছিক এবং সাজানোর অপশন গুলি নির্দিষ্ট করতে ব্যবহার করা যেতে পারে।
নিচের উদাহরণ দেখুন :
<?php $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "e" => "apple"); arsort($fruits); echo "<pre>"; print_r($fruits); echo "</pre>"; ?>
Output
Array ( [a] => orange [d] => lemon [b] => banana [e] => apple )
ধরা যাক আপনার কাছে ছাত্রদের গ্রেডের উপর ভিত্তি করে একটি associative array আছে, এবং আপনি key হিসাবে তাদের নাম বজায় রেখে descending order এ শিক্ষার্থীদের গ্রেড অনুসারে সাজাতে চান:
// Sample associative array of student grades $studentGrades = array( 'Alice' => 90, 'Bob' => 78, 'Charlie' => 95, 'David' => 82, 'Eve' => 88 ); // Use asort to sort the array by grades in descending order arsort($studentGrades); // Now $studentGrades is sorted by grades while maintaining the association with student names foreach ($studentGrades as $name => $grade) { echo $name . ": " . $grade . "\n"; }
Output:
Charlie: 95 Alice: 90 Eve: 88 David: 82 Bob: 78
এই উদাহরণে, arsort ফাংশন $studentGrades অ্যারেকে ছাত্রের গ্রেডের উপর ভিত্তি করে descending order এ সাজায় যখন student names (keys) এবং তাদের grades (values) মধ্যে সম্পর্ক রক্ষা করে। এটি তাদের গ্রেডের উপর ভিত্তি করে শিক্ষার্থীদের র্যাঙ্ক করা তালিকা প্রদর্শনের জন্য উপযোগী হতে পারে।
নিম্নে natural order এ book title গুলির একটি associative array কে descending order এ সাজানোর জন্য PHP-তে arsort সহ SORT_NATURAL এবং SORT_FLAG_CASE flag ব্যবহার করে এখানে একটি বাস্তব উদাহরণ রয়েছে:
<?php // Sample associative array of book titles $bookTitles = array( 'Book_1'=>'catching fire', 'Book_2'=>'The Hunger Games', 'Book_3'=>'mockingjay', 'Book_4'=>'The Hobbit', 'Book_5'=>'The Lord of the Rings', ); // Use asort with SORT_NATURAL flag to sort the array arsort($bookTitles, SORT_NATURAL|SORT_FLAG_CASE); // Now $bookTitles is sorted in natural order foreach ($bookTitles as $bookNo=>$title) { echo "$bookNo:$title" . "\n"; }
PHP uasort() Function
PHP তে uasort function টি ও usort function এর মতোই শুধু value গুলোকে sorting করে তবে পুরাতন index বা key নষ্ট করেনা, অর্থাৎ পুরাতন index বা key রেখেই value গুলোকে sorting করে , এবং এটিও usort function এর মতোই নিজে sorting করতে পারেনা, এটাকে user বা programmer নিজের তৈরী call back function দিয়ে sorting করিয়ে নিতে হয় ।
PHP uasort() function syntax()
uasort(array &$array, callable $callback): true
Parameters:
- $array: এখানে input array টি থাকবে।
- callback:একটি user-defined function যা array থেকে দুটি element এর তুলনা করে এবং তাদের order অর্থাৎ ক্রম নির্ধারণ করে। callback function টি একটি positive integer রিটার্ন করবে যদি প্রথম element টি দ্বিতীয়টির পরে আসে, একটি negative integer যদি এটি আগে আসে, বা zero (শূন্য) যদি তাদের অর্ডার পরিবর্তন করার প্রয়োজন না হয়।
PHP uasort ফাংশন কিভাবে কাজ করে?
PHP-তে uasort() ফাংশন কীভাবে একটি callback ফাঙ্কশনের সাহায্যে sorting অ্যালগরিদম ব্যবহার করে কাজ করে তার একটি simplified pseudocode উপস্থাপনা এখানে দেওয়া হল।
Function uasort(inputArray, comparisonFunction) Create a copy of the inputArray called sortedArray Create an empty array called keyArray to store keys for each pair (key, value) in sortedArray append key to keyArray Sort keyArray using the comparisonFunction to determine the order for each key in keyArray move the corresponding value from sortedArray to a temporary variable remove the key-value pair from sortedArray insert the key-value pair into a new array called finalArray return finalArray End Function
callback function syntax
callback(mixed $element1, mixed $element2): int
আরেকটু সহজ করে বুঝতে চাইলে নিচের উদাহরণটি দেখুন:
function callbackFunction($element1, $element2) { // Comparison logic to determine the order of $element1 and $element2 // Returns a positive integer if $element1 should come after $element2 // Returns a negative integer if $element1 should come before $element2 // Returns 0 if $element1 and $element2 have the same order }
এই সিনট্যাক্সে:
- callbackFunction: এটি user-defined callback ফাংশনের নাম। আপনি যেকোন বৈধ ফাংশনের নাম বেছে নিতে পারেন।
- $element1 এবং $element2: এই অ্যারের দুটি elements যা আপনি sorting প্রক্রিয়ায় compare করতে চান।
- ফাংশনে এমন logic থাকা উচিত যা $element1 এবং $element2 এর তুলনা করে এবং একটি positive integer return করে যদি $element1 $element2 এর পরে আসে, একটি positive integer যদি $element1 $element2 এর আগে আসে, অথবা যদি তাদের অর্ডার পরিবর্তন করার প্রয়োজন না হয় তাহলে 0।
এখানে একটি uasort() কলব্যাক ফাংশনের একটি সাধারণ উদাহরণ দেওয়া হলো:
<?php function customSort($a, $b) { if ($a < $b) { return -1; // $a should come before $b } elseif ($a > $b) { return 1; // $a should come after $b } else { return 0; // $a and $b have the same order } // You can write above comparison just using spaceship operator: //return $a<=>$b; } $numbers = ["a"=>5, "b"=>3, "x"=>1, "d"=>4, "e"=>2]; uasort($numbers, 'customSort'); print_r($numbers);
Output
Array ( [x] => 1 [e] => 2 [b] => 3 [d] => 4 [a] => 5 )
এই উদাহরণে, customSort ফাংশন uasort() এর জন্য callback function হিসাবে ব্যবহৃত হয়। এটি দুটি সংখ্যার তুলনা করে, এবং যদি প্রথম সংখ্যাটি দ্বিতীয়টির চেয়ে কম হয় তবে এটি -1 প্রদান করে, নির্দেশ করে যে প্রথম সংখ্যাটি দ্বিতীয়টির আগে আসা উচিত। প্রথম সংখ্যাটি বড় হলে, এটি 1 প্রদান করে, যা নির্দেশ করে যে প্রথম সংখ্যাটি দ্বিতীয়টির পরে আসা উচিত। যদি তারা সমান হয়, এটি 0 প্রদান করে। এই কাস্টম sorting logic টি sorting প্রক্রিয়া চলাকালীন অ্যারের উপাদানগুলির order (ক্রম) নির্ধারণ করে।
নিম্নে কয়েকটি সহজ উদাহরণ দেওয়া হলো :
<?php function cmpasc($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; } function cmpdesc($a, $b) { if ($a == $b) { return 0; } return ($a > $b) ? -1 : 1; } $a = $b= array("a"=>3, "b"=>2, "f"=>5, "d"=>6, "e"=>1); uasort($a, "cmpasc"); echo "Ascending Order Sorting By Callback Function"; echo "<pre>"; print_r($a); echo "</pre>"; echo "Descending Order Sorting By Callback Function"; uasort($b,"cmpdesc"); echo "<pre>"; print_r($b); echo "</pre>"; ?>
Output
Ascending Order Sorting By Callback Function Array ( [e] => 1 [b] => 2 [a] => 3 [f] => 5 [d] => 6 ) Descending Order Sorting By Callback Function Array ( [d] => 6 [f] => 5 [a] => 3 [b] => 2 [e] => 1 )