PHP Array Sorting Functions
PHP Array Sorting Functions Part-4: PHP array 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 )