Comment

PHP Sorting Arrays (সর্টিং অ্যারে)

PHP ইউসর্ট (usort() )

Estimated reading: 2 minutes 8 views Contributors

সারাংশ: এই টিউটোরিয়ালে, আপনি শিখবেন কিভাবে PHP usort() function ব্যবহার করে user-defined comparison function ব্যবহার করে array সাজাতে হয়।

PHP ইউসর্ট ফাংশনের ভূমিকাঃ

এখন পর্যন্ত, আপনি বিল্ট ইন কম্পেরিজন অপারেটর ব্যবহার করে array সাজাতে শিখেছেন।

উদাহরণ স্বরূপ, আপনি যখন  sort() ফাংশন ব্যবহার করেন অ্যারে সাজানোর জন্য, তখন PHP  বিল্ট ইন কম্পেরিজন অপারেটর ব্যবহার করে, নাম্বার কম্পেয়ার করেন।

usort(array &$array, callable $callback): bool

usort() ফাংশনের দুটি প্যারামিটার রয়েছেঃ

  • $array হল ইনপুট অ্যারে.
  • $callback  হল কাস্টম কম্পেরিজন ফাংশন.

usort() ফাংশন সফল বা মিথ্যা বা ব্যার্থ এর ক্ষেত্রে true ফেরত দেয়।

 নিছে $callback-এর সিন্ট্যাক্স রয়েছেঃ

callback(mixed $x, mixed $y): int

$callback ফাংশনের দুটি প্যারামিটার রয়েছে, যা তুলনা করার জন্য অ্যারে উপদান রয়েছে।

$callback ফাংশন দুটি উপাদান এর  ($x এবং $y)  তুলনা করে এবং একটি  পূর্ণসংখ্যা ভেল্যু প্রদান করে:

  • শূণ্য (0) মানে $x আর $y এর সমান।
  • একটি নেগেটিভ নাম্বার মানে $x এর আগে $y .
  • একটি পজিটিভ নাম্বার মানে $x এর পরে $y .

usort() ফাংশন ব্যবহার করার কিছু উদাহরণ দেখা যাক।

১) নাম্বার অ্যারে সাজানোর জন্য PHP ইউসর্ট ফাংশন ব্যবহার করে।

নিম্নোক্ত উদাহরণ ব্যাখ্যা করে, কিভাবে নাম্বার অ্যারে সাজানোর জন্য  usort() ফাংশন ব্যবহার করতে হয়ঃ

<?php

$numbers = [2, 1, 3];

usort($numbers, function ($x, $y) {
    if ($x === $y) {
        return 0;
    }
    return $x < $y ? -1 : 1;
});

print_r($numbers);

আউটপুটঃ

Array
(
    [0] => 1   
    [1] => 2   
    [2] => 3   
)    

এটা কিভাবে কাজ করে.

  • প্রথমে তিনটি সংখ্যা 2, 1 এবং 3 এর একটি অ্যারে ডিফাইন করুন।
  • দ্বিতীয়ত,  $numbers অ্যারে সাজানোর জন্য usort()ফাংশন ব্যবহার করুন। দুটি সংখ্যা সমান হলে কলব্যাক ফাংশন 0 রিটার্ন করে, প্রথম সংখ্যাটি দ্বিতীয়টির চেয়ে কম হলে -1, এবং প্রথম সংখ্যাটি দ্বিতীয়টির চেয়ে বড় হলে 1 প্রদান করে।

অ্যারে উপাদানকে নিম্নমুখী ক্রমে সাজানোর জন্য, আপনাকে কম্পেরিজন ফাংশন-এ যুক্তি পরিবর্তন করতে হবে:

<?php

$numbers = [2, 1, 3];

usort($numbers, function ($x, $y) {
    if ($x === $y) {
        return 0;
    }
    return $x < $y ? 1 : -1;
});

print_r($numbers);

আপনি যদি PHP 7 বা নতুন ব্যবহার করেন, তাহলে কোডটিকে আরও সংক্ষিপ্ত করতে আপনি স্পেসশীপ অপারেটর (<=>) ব্যবহার করতে পারেনঃ

$x <=> $y

স্পেসশীপ অপারেটর দুটি এক্সপ্রেশন এর তুলনা করে এবং -1, 0, বা 1 রিটার্ন করে যখন $x যথাক্রমে $y-এর থেকে কম, সমান বা বড় হয়।

উদাহরণ স্বরূপঃ

<?php

$numbers = [2, 1, 3];

usort($numbers, function ($x, $y) {
    return $x <=> $y;
});

print_r($numbers);

কলব্যাক সহজ হলে, আপনি এইটার মত একটি অ্যারো ফাংশন ব্যবহার করতে পারেনঃ

<?php

$numbers = [2, 1, 3];
usort($numbers, fn ($x, $y) =>  $x <=> $y);

print_r($numbers);

মনে রাখবেন যে, PHP 7.4 থেকে অ্যারো ফাংশন চালু করেছে।

২) PHP ইউসর্ট ফাংশন ব্যবহার করে দৈর্ঘ অনুসারে স্ট্রিং এর অ্যারে সাজানো

নিচের উদাহরণ দৈর্ঘ অনুসারে নামের array সাজানোর জন্য usort() ফাংশন ব্যবহার করেঃ

<?php

$names = [ 'Alex', 'Peter',  'John' ];
usort($names, fn($x,$y) => strlen($x) <=> strlen($y));

var_dump($names);

আউটপুটঃ

Array(3) 
{
    [0]=>  string(4) "Alex"
    [1]=>  string(4) "John"
    [2]=>  string(5) "Peter"
}

৩) অবজেক্ট অ্যারে সাজাতে PHP ইউসর্ট ফাংশন ব্যবহার করেঃ

নিম্নলিখিত উদাহরণ  age প্রপার্টি অনুসারে Person অবজেক্ট এর একটি অ্যারে সাজানোর জন্য  usort() ফাংশন ব্যবহার করে।

<?php

class Person
{
    public $name;
    public $age;

    public function __construct(string $name, int $age)
    {
        $this->name = $name;
        $this->age = $age;
    }
}

$group = [
    new Person('Bob', 20),
    new Person('Alex', 25),
    new Person('Peter', 30),
];

usort($group, fn($x, $y) => $x->age <=> $y->age);

print_r($group);

আউটপুটঃ

Array
(
    [0] => Person Object
        (
            [name] => Bob
            [age] => 20
        )
    [1] => Person Object
        (
            [name] => Alex
            [age] => 25
        )
    [2] => Person Object
        (
            [name] => Peter
            [age] => 30
        )
)

এটা কিভাবে কাজ করেঃ-

  • প্রথমে, একটি Person ক্লাস ডিফাইন করুন যার দুটি প্রপার্টিজ রয়েছে: name এবং  age
  • দ্বিতীয়ত,  Person অবজেক্ট ধারণ করে এমন $group অ্যারে ডিফাইন করুন।
  • তৃতীয়ত,  $group অ্যারের Person অবজেক্টকে সাজানোর জন্য  usort() ফাংশন ব্যবহার করুন। usort() ফাংশন-এ কম্পেরিজন ফাংশন ব্যবহার করে যা দুটি Person অবজেক্ট এর বয়স তুলনা করে।

আপনি যদি Person অবজেক্ট এর নাম অনুসারে সাজাতে চান, তাহলে আপনি এইভাবে $name  তুলনা করতে পারেন:

usort($group, fn($x, $y) => $x->name <=> $y->name);

একটি কলব্যাক হিসাবে একটি স্টাটিক মেথড ব্যবহার করে।

নিম্নলিখিত উদাহরণ usort() ফাংশন এর জন্য কলব্যাক হিসাবে ক্লাস এর একটি স্টাটিক মেথড ব্যবহার করে:

<?php

class Person
{
    public $name;

    public $age;

    public function __construct(string $name, int $age)
    {
        $this->name = $name;
        $this->age = $age;
    }
}

class PersonComparer
{
    public static function compare(Person $x, Person $y)
    {
        return $x->age <=> $y->age;
    }
}

$group = [
    new Person('Bob', 20),
    new Person('Alex', 25),
    new Person('Peter', 30),
];

usort($group, ['PersonComparer', 'compare']);

print_r($group);

এই উদাহরণে, আমরা PersonComparer ক্লাস ডিফাইন  করি, যেটিতে compare() স্টাটিক মেথড রয়েছে।

compare() স্টাটিক মেথড স্পেসশীপ অপারেটর ব্যবহার করে বয়স অনুসারে দুটি Person অবজেক্ট এর কম্পেয়ার করে।

usort() ফাংশন কলব্যাক হিসাবে PersonComparer ক্লাস এর compare() স্টাটিক মেথড ব্যবহার করতে আপনি একটি অ্যারে পাস করেন যাতে দুটি উপাদান রয়েছেঃ

usort($group, ['PersonComparer', 'compare']);

প্রথম উপাদান ক্লাসের নাম এবং দ্বিতীয়টি স্টাটিক মেথড.

সারাংশ

  • ইউজার ডিফাইন কম্পেরিজন ফাংশন ব্যবহার করে একটি অ্যারে সাজানোর জন্য PHP usort() ফাংশন ব্যবহার করুন।

Leave a Comment

Share this Doc

PHP ইউসর্ট (usort() )

Or copy link

CONTENTS

Subscribe

×
Cancel