PHP Array Sorting Functions Part-4: PHP array array_multisort, natsort and natcasesort function

php array_multisort, natsort and natcasesort function

PHP সহ যেকোনো Language এই Sorting একটি গুরুত্বপূর্ণ বিষয়, আজকের পর্বে আমরা PHP Language এর Built-in Sorting Function গুলোর মধ্যে array array_multisort, natsort and natcasesort function এই Function গুলো নিয়ে আলোচনা করব।

PHP array_multisort() Function

PHP-তে, array_multisort ফাংশনটি এক বা একাধিক কলাম বা কী-এর উপর ভিত্তি করে একাধিক অ্যারে বা মাল্টি-ডাইমেনশনাল অ্যারে sorting এর (সাজানোর) জন্য ব্যবহার করা হয়। এটি একটি বহুমুখী ফাংশন যা আপনাকে বিভিন্ন মানদণ্ডের উপর ভিত্তি করে অ্যারে sorting (সাজানোর) এর অনুমতি দেয়, যেমন sync এ একাধিক অ্যারে সাজানো, একাধিক কলাম দ্বারা অ্যারে sorting করা বা এমনকি বহুমাত্রিক অ্যারে sorting করা।

PHP array_multisort() function syntax

<?php 
array_multisort(
    $array1, sorting_order1, sorting_type1, 
    $array2, sorting_order2, sorting_type2,
    mixed ...$res
):bool;

Parameters:

  • $array1: প্রথম অ্যারে যা আপনি sort করতে চান।
  • sorting_order1: $array1-এর জন্য sorting order (হয় ascending এর জন্য SORT_ASC অথবা descending এর জন্য SORT_DESC)।
  • sorting_type1 (optional): $array1 এর জন্য sorting type (যেমন, SORT_REGULAR, SORT_NUMERIC, বা SORT_STRING)।
  • $array2, sorting_order2, sorting_type2, ইত্যাদি: একাধিক অ্যারে একসাথে sorting এর জন্য অতিরিক্ত অ্যারে এবং তাদের sorting criteria.

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 array_multisort ফাংশন কিভাবে কাজ করে?

PHP-তে array_multisort ফাংশনের জন্য একটি সম্পূর্ণ pseudocode তৈরি করা তার versatility এবং বিভিন্ন ব্যবহারের ক্ষেত্রে বেশ জটিল হতে পারে। যাইহোক, এটি কীভাবে কাজ করে তার একটি প্রাথমিক ধারণা দিতে আমি একটি simplified pseudocode এর ধারণা দিলাম:

Function array_multisort(array1, order1, type1, array2, order2, type2, ... )
    // Validate the input arrays and parameters

    if the number of arrays, orders, and types do not match, return an error

    Create a copy of each input array

    Apply sorting to the copied arrays based on order and type
    - For each array, use a sorting algorithm to sort it according to order and type

    Rearrange the original arrays based on the sorted copied arrays
    - Iterate over the elements of the copied arrays
    - Determine the original index of each element in the copied array
    - Rearrange the original arrays accordingly

    Return the sorted arrays
End Function

নিচের উদাহরণ দেখুন :

Example #1 array_multisort() example

$names = array("Alice", "Bob", "Charlie", "David");
$scores = array(90, 78, 95, 82);

array_multisort($scores, SORT_DESC, $names);

// Now $scores and $names are sorted in sync
print_r($names);
print_r($scores);

Output:

Array
(
    [0] => Charlie
    [1] => Alice
    [2] => David
    [3] => Bob
)
Array
(
    [0] => 95
    [1] => 90
    [2] => 82
    [3] => 78
)

এই উদাহরণে, array_multisort ফাংশন $names এবং $scores অ্যারেকে একই সাথে sort করে , নিশ্চিত করে যে উভয় অ্যারেতে সংশ্লিষ্ট elements গুলি সারিবদ্ধ থাকে। sorting করা $scores অ্যারের মানের উপর ভিত্তি করে descending অর্ডারে , এবং $names অ্যারে সেই অনুযায়ী rearrange (পুনর্বিন্যাস) করা হয়।

Example #2 array_multisort() example

price এবং name উভয় দ্বারা পণ্যের অ্যারে sort করার জন্য array_multisort ব্যবহার করার একটি বাস্তব উদাহরণ এখানে দেওয়া হলো। এটি e-commerce application গুলির একটি common scenario যেখানে আপনি ইউজারদের জন্য sorting options গুলি প্রদান করতে চান৷

// Sample array of products with prices and names
$products = array(
    array('name' => 'Laptop', 'price' => 800),
    array('name' => 'Smartphone', 'price' => 500),
    array('name' => 'Tablet', 'price' => 300),
    array('name' => 'Headphones', 'price' => 100),
    array('name' => 'Mouse', 'price' => 20),
);

// Create separate arrays for names and prices
$productNames = array_column($products, 'name');
$productPrices = array_column($products, 'price');

// Sort the products by price (ascending) and name (ascending) in sync
array_multisort($productPrices, SORT_ASC, $productNames, SORT_ASC, $products);

// Now $products is sorted by price (ascending) and name (ascending)
foreach ($products as $product) {
    echo $product['name'] . ": $" . $product['price'] . "\n";
}

Output:

Mouse: $20
Headphones: $100
Tablet: $300
Smartphone: $500
Laptop: $800

এই উদাহরণে, আমাদের কাছে price গুলো এবং name গুলো সহ প্রোডাক্ট গুলির একটি অ্যারে রয়েছে। price (ascending) এবং name (ascending)উভয় মানদণ্ডের উপর ভিত্তি করে প্রোডাক্ট গুলিকে sorted করার জন্য আমরা array_multisort ব্যবহার করি, যার ফলে প্রোডাক্ট গুলির একটি তালিকা প্রথমে price এবং তারপর name অনুসারে sorting করা হয়। এটি ব্যবহারকারীদের বিভিন্ন সর্টিং মানদণ্ডের উপর ভিত্তি করে একটি নির্দিষ্ট অর্ডারে (ক্রমে ) প্রোডাক্ট দেখতে দেয়।

PHP Array natsort() Function

PHP-তে natsort ফাংশনটি একটি array কে একটি natural (human-friendly) sorting এর জন্য ব্যবহৃত হয়। এটি এমনভাবে আইটেমগুলি অর্ডার করে যা মানুষের কাছে বোধগম্য হয় যখন alphanumeric string গুলির সাথে কাজ করে, যেমন filenames বা version numbers৷ এটি numbers গুলোর সাথে string গুলিকে আরও স্বজ্ঞাত ক্রমে সাজায়, যেখানে strings গুলির মধ্যে number গুলি অভিধানগতভাবে এর পরিবর্তে সংখ্যাগতভাবে সাজানো হয়।

PHP natsort() function syntax

natsort(array &$array): true

Parameters:

  • $array: Input Array যা আপনি natural (human-friendly) sorting করতে চান।

PHP Array natsort ফাংশন কিভাবে কাজ করে?

natsort ফাংশন কীভাবে কাজ করতে পারে তার একটি সিউডোকোড উপস্থাপনা এখানে রয়েছে:

Function natsort(inputArray)
    Create a copy of the inputArray called sortedArray
    Create an empty array called naturalOrderArray

    for each element in sortedArray
        extract numbers and non-numeric parts from the element

    Sort the extracted numbers numerically

    Sort the elements in sortedArray based on the sorted numbers and non-numeric parts

    return sortedArray
End Function

এই সিউডোকোডে, natsort প্রতিটি উপাদান থেকে numeric এবং non-numeric অংশগুলি বের করে, numeric অংশগুলিকে numerically সাজায় এবং তারপর numeric সংখ্যা এবং non-numeric অংশগুলির উপর ভিত্তি করে element গুলিকে পুনরায় সাজায়৷ ফলাফল হল একটি natural order যা স্ট্রিংগুলির মধ্যে numeric value গুলো বিবেচনা করে।

প্রথমে চলুন দেখা যাক , একটি array কে Natural Sort না করে সাধারণ sort করলে কেমন আসবে :

<?php
$files = array('file10.txt', 'file1.txt', 'file2.txt', 'file20.txt', 'file3.txt');

sort($files);

// Now $files is sorted naturally
print_r($files);

Output:

Array
(
    [0] => file1.txt
    [1] => file10.txt
    [2] => file2.txt
    [3] => file20.txt
    [4] => file3.txt
)

লক্ষ্য করবেন , এখানে file1.txt এর file2.txt আসার কথা ছিল কিন্তু আসল file10.txt, আবার একই ভাবে file২.txt এর পর file৩.txt না এসে file২০.txt এসেছে। যা হয়তো আপনি আসা করেন নি। আর এর কারণ এইটা ন্যাচারাল সর্টিং এলগোরিদম এপ্লাই করে নাই। আপনি যদি উপরের এরে কে Naturally Sorting করতে চান, তাহলে sort ফাঙ্কশন এর পরিবর্তে আপনি natsort ফাঙ্কশনটি ব্যবহার করতে পারেন।

<?php
$files = array('file10.txt', 'file1.txt', 'file2.txt', 'file20.txt', 'file3.txt');

natsort($files);

// Now $files is sorted naturally
print_r($files);

Output:

Array
(
    [1] => file1.txt
    [2] => file2.txt
    [4] => file3.txt
    [0] => file10.txt
    [3] => file20.txt
)

এই উদাহরণে, natsort ফাঙ্কশনটি ফাইলের নামগুলির বিন্যাসকে naturally sort করার জন্য ব্যবহার করা হয়, ফলে আরও human-friendly order যা ফাইলের নামের মধ্যে numeric পার্ট গুলিকে বিবেচনা করে।

PHP Array natcasesort() (Natural Case-Insensitive Sort) Function:

natcasesort ফাঙ্কশনটি natsort ফাঙ্কশনের মতোই natural sort এর কাজ করে।তবে অতিরিক্তভাবে, এটি একটি case-insensitive sort করে, তাই sort order নির্ধারণ করার সময় uppercase এবং lowercase অক্ষরগুলিকে একই বা সমান হিসাবে বিবেচনা করা হয়। natural sorting order বজায় রেখে আপনি যখন case-insensitive মেথডে স্ট্রিংগুলি সাজাতে চান তখন এটি দরকারী৷ নিচের উদাহরণ দিয়ে এর পার্থক্য বোঝার চেষ্টা করি।

$strings = array('item2', 'Item10', 'item1', 'Item20', 'item3');

// Using natsort
natsort($strings);
print_r($strings);

// Using natcasesort
natcasesort($strings);
print_r($strings);

Output for natsort:

Array
(
    [1] => Item10
    [3] => Item20
    [2] => item1
    [0] => item2
    [4] => item3
)

Output for natcasesort:

Array
(
    [2] => item1
    [0] => item2
    [4] => item3
    [1] => Item10
    [3] => Item20
)

আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম 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