PHP Array Sorting Functions Part-2: PHP array asort, arsort and uasort function

PHP Array asort, arsort and uasort

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
)

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ১৫ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller, Amarbebsha Ltd সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ডেটা সাইন্স, মেশিন লার্নিং, বিগ ডেটা, ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। এছাড়াও বাংলাদেশের ১৮৫ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ১২০ এরও অধিক ছাত্র আমার হাতে জেন্ড সার্টিফাইড ইঞ্জিনিয়ার হয়েছেন। বর্তমানে w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -8.2 Engineering, Laravel Mastering Course with ReactJS, Python Beginning To Advance with Blockchain, Machine Learning and Data Science, Professional WordPress Plugin Development Beginning to Advance কোর্স করাই। আর অবসর সময়ে w3programmers.com এ ওয়েব টেকনোলজি নিয়ে লেখালেখি করি।

Leave a Reply