PHP Array General Functions Part-5: array_unique, array_flip, array_reverse, array_rand and shuffle function

array_unique, array_flip, array_reverse, array_rand and shuffle function

PHP Array General Function গুলো নিয়ে পঞ্চম পর্বে আপনাকে স্বাগতম। আজকের পর্বে আমরা array_unique, array_flip, array_reverse, array_rand এবং shuffle function এর বিস্তারিত আলোচনা করব।

PHP array_unique() Function

PHP-তে, array_unique ফাংশনটি একটি array থেকে ডুপ্লিকেট value গুলো অপসারণ করতে ব্যবহৃত হয়, শুধুমাত্র unique value সহ একটি নতুন অ্যারে return দেয়। এটি সাধারণত ব্যবহৃত হয় যখন আপনি নিশ্চিত করতে চান যে একটি array তে শুধুমাত্র স্বতন্ত্র element গুলো রয়েছে এবং একই ধরণের যেকোন element গুলি বাদ দেওয়া হয়েছে।

এখানে array_unique ফাংশনের বেসিক সিনট্যাক্স রয়েছে:

array_unique(array $array, int $flags = SORT_STRING): array

Parameters:

  • $array: input array যেখান থেকে ডুপ্লিকেট মান মুছে ফেলা হবে।
  • $flags (optional): একটি optional flag যা নির্দিষ্ট করে কিভাবে element গুলিকে compare করে Sort করা যায়৷ ডিফল্ট আচরণ হল element কে strings (SORT_STRING) হিসাবে বিবেচনা করা। আপনি নিম্নোক্ত Comparison type flags গুলো ব্যবহার করতে পারেন :
    • SORT_REGULAR – item গুলি normally compare করবে (প্রকার পরিবর্তন করবেন না)
    • SORT_NUMERIC – item গুলি Numerically compare করবে।
    • SORT_STRING – item গুলি strings হিসেবে compare করবে।
    • SORT_LOCALE_STRING – current locale এর উপর ভিত্তি করে item গুলিকে স্ট্রিং হিসাবে তুলনা করবে।

PHP array_unique() function কিভাবে কাজ করে?

এখানে array_unique কিভাবে কাজ করে তার একটি simplified pseudocode ব্যাখ্যা দেওয়া হলো :

function array_unique(inputArray, flags = SORT_STRING):
    // Create an empty resultArray to store unique values
    Create an empty resultArray
    
    // Create a set to keep track of seen values
    Create an empty set
    
    For each element in inputArray:
        // If element is not in the set, add it to the set and resultArray
        If element is not in the set:
            Add element to the set
            Add element to resultArray
    
    // If SORT_REGULAR flag is set, perform a type-insensitive comparison
    If flags is SORT_REGULAR:
        For each element in resultArray:
            Compare element with other elements in resultArray without type conversion
    
    Return resultArray

সিউডোকোড original order বজায় রাখার সময় একটি অ্যারে থেকে ডুপ্লিকেট মানগুলি সরানোর প্রক্রিয়া বর্ণনা করে। array_unique ফাংশন একটি result array এবং দেখা মান ট্র্যাক রাখার জন্য একটি সেট তৈরি করে। এটি ইনপুট অ্যারের মাধ্যমে iterate করে, result array তে elements যোগ করে যদি তারা ইতিমধ্যে সেটে না থাকে। SORT_REGULAR পতাকা সেট করা থাকলে, এটি একটি type-insensitive comparison সম্পাদন করে। result array তে শুধুমাত্র unique value গুলো রয়েছে।

উদাহরণ#১:

$numbers = [1, 2, 2, 3, 4, 4, 5];

$uniqueNumbers = array_unique($numbers);

// $uniqueNumbers is now [1, 2, 3, 4, 5]

উদাহরণ#২:types checking

<?php
$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);
?>

Output:

array(2) {
  [0] => int(4)
  [2] => string(1) "3"
}

উদাহরণ#৩:

<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>

Output

Array
(
    [a] => green
    [0] => red
    [1] => blue
)

PHP-তে array_unique ফাংশন ব্যবহার করার একটি বাস্তব-উদাহরণ দেওয়া যেতে পারে যেখানে আপনি নিশ্চিত করতে চান যে ইউজারদের ইমেলের একটি লিস্ট, যেমন একটি mailing list বা ইউজারদের ডাটাবেসের জন্য, শুধুমাত্র unique email address গুলো রয়েছে। এটি নিশ্চিত করে যে প্রতিটি email address হচ্ছে unique, এবং আপনার ইউজারের রেকর্ডে কোনও ডুপ্লিকেট নেই৷

আসুন একটি উদাহরণ বিবেচনা করি যেখানে আপনার email address গুলির একটি অ্যারে রয়েছে এবং আপনি একটি clean list বজায় রাখতে ডুপ্লিকেট ইমেল ঠিকানাগুলি রিমুভ করতে চান:

PHP array_flip() Function

PHP-তে, array_flip ফাংশনটি একটি অ্যারের key গুলোকে value তে রূপান্তর এবং value গুলোকে key তে রূপান্তর করতে ব্যবহৃত হয়। এটি ইনপুট হিসাবে একটি array নেয় এবং একটি নতুন একটি array প্রদান করে যেখানে মূল array এর key গুলি value তে রূপান্তর হয়ে যায় এবং value গুলি key তে রূপান্তর হয়ে যায়। যদি মূল অ্যারেতে ডুপ্লিকেট value থাকে, তবে ফলাফল অ্যারেতে কী হিসাবে শুধুমাত্র শেষ key টি ব্যবহার করা হবে।

আরো সহজ করে বলা যায়, PHP -তে array_flip ফাংশন একটি নতুন অ্যারে তৈরির কাজ করে, যেখানে মূল অ্যারের keys গুলি values হয়ে যায় এবং মূল অ্যারের values গুলি keys হয়ে যায়। যদি মূল অ্যারেতে ডুপ্লিকেট value থাকে, তবে result array তে key হিসাবে শুধুমাত্র শেষ value টি ব্যবহার করা হবে।

এখানে array_flip এর বেসিক সিনট্যাক্স দেওয়া হলো :

array_flip(array $array): array

Parameters:

  • $array: ফ্লিপ করার জন্য এখানে key/value জোড়ার একটি অ্যারে থাকবে।

PHP array_flip() function কিভাবে কাজ করে?

এখানে array_flip কিভাবে কাজ করে তার একটি simplified pseudocode ব্যাখ্যা দেওয়া হলো :

function array_flip(originalArray):
    Create an empty resultArray
    
    For each key-value pair in originalArray:
        Assign the key as the value in resultArray
        Assign the value as the key in resultArray
    
    Return resultArray

উদাহরণ#১: Numerical Array

<?php
$input = array("oranges", "apples", "pears");
$flipped = array_flip($input);

print_r($flipped);
?>

উপরের উদাহরণের আউটপুট হবে নিম্নরূপ:

Array
(
    [oranges] => 0
    [apples] => 1
    [pears] => 2
)

উদাহরণ#২: duplicate value থাকলে

<?php
$input = array("a" => 1, "b" => 1, "c" => 2);
$flipped = array_flip($input);

print_r($flipped);
?>

উপরের উদাহরণের আউটপুট হবে নিম্নরূপ:

Array
(
    [1] => b
    [2] => c
)

ব্যাখ্যা: উপরের উদাহরণ দিয়ে বুঝা গেলো, আপনি যেই array টি কে flip করবেন , সেটিতে যদি ডুপ্লিকেট মান থাকে , সেক্ষেত্রে সর্বশেষ value টি থাকবে , বাকিগুলো রিপ্লেস হবে।

উদাহরণ#৩:

একটি বাস্তব উদাহরণ আলোচনা করা যাক , যেখানে আপনি PHP-তে array_flip ফাংশন ব্যবহার করতে পারেন তা হল একটি লুকআপ টেবিল তৈরি করা বা কীগুলির মান ম্যাপ করার জন্য। আসুন এমন একটি দৃশ্য বিবেচনা করি যেখানে আপনার কাছে দেশগুলির তালিকা এবং তাদের সংশ্লিষ্ট দেশের কোড রয়েছে এবং আপনি দেশের নাম বা কোডের উপর ভিত্তি করে দ্রুত অ্যাক্সেসের জন্য একটি lookup table তৈরি করতে চান৷ এই ধরণের কাজে কিভাবে array_flip ফাঙ্কশন ব্যবহার করা যেতে পারে, তা নিম্নে দেওয়া হলো:

<?php 
<?php 
// Original array with country names as keys and country codes as values
$countryCodes = [
    'United States' => 'US',
    'Canada' => 'CA',
    'United Kingdom' => 'UK',
    'Australia' => 'AU',
];

// Create a lookup table by flipping the original array
$countryLookup = array_flip($countryCodes);

// Now, you can quickly look up country Names by country codes
$countryCode = 'CA';
if (isset($countryLookup[$countryCode])) {
    $countryName = $countryLookup[$countryCode];
    echo "The country code for $countryName is $countryCode.";
} else {
    echo "Country not found in the lookup table.";
}

Output:

The country code for Canada is CA.

এই উদাহরণে, আমাদের কাছে প্রথমে key হিসাবে country names এবং value হিসাবে country codes সহ একটি অ্যারে রয়েছে। আমরা একটি লুকআপ টেবিল তৈরি করতে array_flip ব্যবহার করি যেখানে country code গুলি key হয়ে ওঠে এবং country name গুলি value হয়ে যায়। এই লুকআপ টেবিলটি আমাদের country কোডের উপর ভিত্তি করে একটি দেশের নাম বের করতে দেয়, এটি ফর্ম প্রসেসিং বা ডেটা ম্যানিপুলেশনের মতো বিভিন্ন পরিস্থিতির জন্য দরকারী করে তোলে যেখানে আপনাকে key গুলির value ম্যাপ করতে হবে।

PHP array_reverse() Function

PHP-তে array_reverse ফাংশনটি অ্যারের element গুলির reverse order করতে ব্যবহৃত হয়। এটি input হিসাবে একটি array নেয় এবং element গুলিকে reverse order এ সাজিয়ে একটি নতুন array প্রদান করে। এখানে array_reverse এর বেসিক সিনট্যাক্স দেওয়া হলো:

array_reverse(array $array, bool $preserve_keys = false): array

Parameters:

  • $array: input array বিপরীত (reverse) করা হবে।
  • $preserve_keys (optional): true সেট করা থাকলে, এই প্যারামিটারটি বিপরীত (reverse) অ্যারেতে original key গুলি সংরক্ষণ করে অর্থাৎ বিদ্যমান key গুলো রেখেই নতুন array তৈরি করে । ডিফল্টরূপে, এটি false সেট করা থাকে, যা Reverse Array তে key গুলিকে পুনরায় number index দেয়।

PHP array_reverse() function কিভাবে কাজ করে?

এখানে array_reverse কিভাবে কাজ করে তার একটি simplified pseudocode ব্যাখ্যা দেওয়া হলো :

function array_reverse(inputArray, preserveKeys = false):
    Create an empty resultArray
    Let lastIndex be the index of the last element in inputArray
    Let currentIndex be 0

    If preserveKeys is true:
        For each element in inputArray in reverse order:
            Add the element to resultArray with its original key

    If preserveKeys is false:
        For each element in inputArray in reverse order:
            Add the element to resultArray with a new key (renumbered)

    Return resultArray

উদাহরণ#১:

$originalArray = [1, 2, 3, 4, 5];
$reversedArray = array_reverse($originalArray);

// $reversedArray is now [5, 4, 3, 2, 1]

উদাহরণ#২: Numerical Array

<?php
// Original array
$originalArray = [1, 2, 3, 4, 5];

// Reversing the array without preserving keys
$reversedArray = array_reverse($originalArray);

// Reversing the array while preserving keys
$reversedArrayWithKeys = array_reverse($originalArray, true);

// Displaying the results
echo "Original Array: ";
print_r($originalArray);

echo "Reversed Array (without preserving keys): ";
print_r($reversedArray);

echo "Reversed Array (with preserving keys): ";
print_r($reversedArrayWithKeys);

Output:

Original Array: Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Reversed Array (without preserving keys): Array
(
    [0] => 5
    [1] => 4
    [2] => 3
    [3] => 2
    [4] => 1
)
Reversed Array (with preserving keys): Array
(
    [4] => 5
    [3] => 4
    [2] => 3
    [1] => 2
    [0] => 1
)

উদাহরণ#৩: Associative Array

<?php
// Original associative array
$originalArray = [
    'apple' => 'red',
    'banana' => 'yellow',
    'cherry' => 'red',
    'orange' => 'orange',
];

// Reversing the associative array without preserving keys
$reversedArray = array_reverse($originalArray);

// Reversing the associative array while preserving keys
$reversedArrayWithKeys = array_reverse($originalArray, true);

// Displaying the results
echo "Original Associative Array: ";
print_r($originalArray);

echo "Reversed Associative Array (without preserving keys): ";
print_r($reversedArray);

echo "Reversed Associative Array (with preserving keys): ";
print_r($reversedArrayWithKeys);

Output:

Original Associative Array: Array
(
    [apple] => red
    [banana] => yellow
    [cherry] => red
    [orange] => orange
)
Reversed Associative Array (without preserving keys): Array
(
    [orange] => orange
    [cherry] => red
    [banana] => yellow
    [apple] => red
)
Reversed Associative Array (with preserving keys): Array
(
    [orange] => orange
    [cherry] => red
    [banana] => yellow
    [apple] => red
)

PHP array_rand() Function

PHP -তে, array_rand function টি একটি অ্যারে থেকে randomly এক বা একাধিক random keys select করতে ব্যবহৃত হয়। এটি আপনাকে তাদের key দ্বারা একটি array থেকে random elements (values) বাছাই বা খুঁজে বের করতে দেয়। রিটার্নকৃত key গুলি তারপর অ্যারের সংশ্লিষ্ট value গুলিতে অ্যাক্সেস করতে ব্যবহার করা যেতে পারে।

এখানে array_rand ফাংশনের বেসিক সিনট্যাক্স দেওয়া হলো :

mixed array_rand(array $array, int $num = 1)

Parameters:

  • $array: Input Array যেখান থেকে random keys সিলেক্ট করতে হবে।
  • $num (ঐচ্ছিক): random key গুলির সংখ্যা সিলেক্ট করতে হবে। নির্দিষ্ট করা না থাকলে, এটি ডিফল্ট 1 থাকে।

array_rand ফাংশন $num প্যারামিটারের মানের উপর নির্ভর করে ইনপুট অ্যারে থেকে এক বা একাধিক random keys রিটার্ন দেয়।

PHP array_rand() function কিভাবে কাজ করে?

এখানে array_rand কিভাবে কাজ করে তার একটি simplified pseudocode ব্যাখ্যা দেওয়া হলো :

function array_rand(inputArray, num = 1):
    Create an empty resultArray
    Create a list of all keys in inputArray

    If num is not specified, set num to 1

    If num is greater than the count of keys in the array:
        Return an error or handle it accordingly

    While num > 0:
        Randomly select a key from the list of keys
        Add the selected key to resultArray
        Remove the selected key from the list of keys
        Decrement num by 1

    Return resultArray

উপরোক্ত সিউডোকোড একটি অ্যারে থেকে randomly (এলোমেলোভাবে) এক বা একাধিক কী নির্বাচন করার প্রক্রিয়া বর্ণনা করে। এতে নির্বাচিত কীগুলি সংরক্ষণ করার জন্য একটি অ্যারে তৈরি করা, random indices তৈরি করা, ফলাফল অ্যারেতে নির্বাচিত কীগুলি যোগ করা এবং নির্বাচিত কীগুলির সংখ্যা ইনপুট অ্যারেতে থাকা কীগুলির মোট সংখ্যার বেশি না হয় তা নিশ্চিত করা জড়িত।

উদাহরণ#১:

<?php
$colors = [
    'red' => 'FF0000',
    'green' => '00FF00',
    'blue' => '0000FF',
    'yellow' => 'FFFF00',
];

$randomKey = array_rand($colors);
echo "Random Key: $randomKey\n"; // Outputs a random key (e.g., 'red')
echo "Now Random Value: $colors[$randomKey]\n"; // Outputs a random Value  (e.g., 'FF0000')

এই উদাহরণে, array_rand ফাংশন $colors array থেকে একটি random key সিলেক্ট করে।

আপনি অ্যারেতে সংশ্লিষ্ট মানগুলি অ্যাক্সেস করতে রিটার্ন করা কী(গুলি) ব্যবহার করতে পারেন, এটি বিভিন্ন অ্যাপ্লিকেশনের জন্য উপযোগী করে তোলে যেখানে randomness বা variety কাঙ্খিত হয়, যেমন আইটেমগুলির একটি তালিকা থেকে random selection বা random content প্রদর্শন করা।

উদাহরণ#২:

এখানে একটি Array থেকে দুটি random keys সিলেক্ট করতে $num = 2 সহ array_rand ফাংশন ব্যবহার করার একটি উদাহরণ দেওয়া হলো:

<?php 
$fruits = [
    'apple',
    'banana',
    'cherry',
    'date',
    'fig',
    'grape',
    'kiwi',
    'mango',
];

$randomKeys = array_rand($fruits, 2);
echo "Random Keys: \n";
print_r($randomKeys);

echo "You Got {$fruits[$randomKeys[0]]} and {$fruits[$randomKeys[1]]}";

এই উদাহরণে, array_rand ফাংশন $num = 2 এর সাথে ব্যবহার করা হয় এবং এটি $fruits array থেকে দুটি random keys সিলেক্ট করে। ফলাফলটি একটি অ্যারে হবে যার মধ্যে মূল অ্যারের থেকে দুটি random keys থাকবে। উদাহরণস্বরূপ, আপনি নিচের মত একটি আউটপুট পেতে পারেন:

Random Keys: 
Array
(
    [0] => 0
    [1] => 5
)
You Got apple and grape

PHP shuffle() Function

PHP-তে, shuffle ফাংশনটি অ্যারের element (value) গুলি randomly shuffle করতে ব্যবহৃত হয়। এটি element গুলিকে এলোমেলো ক্রমে পুনর্বিন্যাস (rearranges) করে, তাই তারা আর তাদের original sequence (ক্রমানুসারে) থাকে না। element গুলির সাথে যুক্ত কীগুলি অপরিবর্তিত থাকে।

এখানে shuffle ফাংশনের বেসিক সিনট্যাক্স রয়েছে:

bool shuffle(array &$array)
  • $array: input array shuffled (এলোমেলো) করা হবে। ফাংশন রেফারেন্স দ্বারা অ্যারে নেয়, যার অর্থ এটি সরাসরি original array কে পরিবর্তন করে, এবং কোনো নতুন ভেরিয়েবলে result বরাদ্দ করার প্রয়োজন নেই।

PHP shuffle() function কিভাবে কাজ করে?

এখানে shuffle function কিভাবে কাজ করে তার একটি simplified pseudocode ব্যাখ্যা দেওয়া হলো :

function shuffle(inputArray):
    // Create a copy of the original array
    Create a copyArray and copy all elements from inputArray
    
    // Initialize an empty resultArray
    Create an empty resultArray
    
    While copyArray is not empty:
        // Generate a random index within the range of copyArray
        Generate a randomIndex between 0 and the last index of copyArray
        
        // Get the element at the randomIndex
        Get element from copyArray at randomIndex
        
        // Add the element to the resultArray
        Add element to resultArray
        
        // Remove the element from copyArray
        Remove element from copyArray at randomIndex
    
    // Replace the original array with the shuffled resultArray
    Set inputArray to resultArray

উপরোক্ত pseudocode এ একটি অ্যারে shuffling (এলোমেলো) করার প্রক্রিয়ার রূপরেখা দেয়। এটি মূল অ্যারের একটি copy তৈরি করে, তারপরে বারবার copy থেকে random element সিলেক্ট করে এবং copy অ্যারে থেকে সরানোর সময় রেজাল্ট অ্যারেতে যুক্ত করে। অবশেষে, আসল অ্যারেটি এলোমেলো ফলাফল অ্যারে দিয়ে প্রতিস্থাপিত হয়।

উদাহরণ#১:

$fruits = ['apple', 'banana', 'cherry', 'date', 'fig'];
shuffle($fruits);

// $fruits is now shuffled randomly

এই উদাহরণে, shuffle ফাংশন $fruits অ্যারের element গুলিকে random order এ shufflling এলোমেলো করে। element গুলির সাথে যুক্ত কীগুলি একই থাকে, তবে মানগুলির ক্রম বা অর্ডার এখন এলোমেলো। এটি এমন অ্যাপ্লিকেশনগুলিতে কার্যকর হতে পারে যেখানে আপনি একটি তালিকার আইটেমগুলির অর্ডার বা ক্রম এলোমেলো করতে চান, যেমন কুইজ প্রশ্নগুলি এলোমেলো করার জন্য বা কার্ড গেমে কার্ডের ডেক এলোমেলো করার জন্য।

উদাহরণ#২:

এবার একটি বাস্তব-বিশ্বের উদাহরণ দেওয়া যেতে পারে যেখানে আপনাকে একটি তালিকা বা অ্যারের আইটেমগুলির ক্রম এলোমেলো করতে হবে। আসুন এমন একটি দৃশ্য বিবেচনা করি যেখানে আপনার একটি কুইজ অ্যাপ্লিকেশন রয়েছে এবং আপনি প্রশ্নগুলির ক্রমকে এলোমেলো করে দিতে চান যাতে ব্যবহারকারীরা যখনই ক্যুইজ নেয় তখন তাদের প্রশ্নের একটি ভিন্ন ক্রম প্রদান করে:

<?php 
// Array of quiz questions
$questions = [
    'What is the capital of France?',
    'Who wrote "Romeo and Juliet"?',
    'What is the chemical symbol for gold?',
    'In which year did the Titanic sink?',
    'What is the largest planet in our solar system?',
];

// Shuffle the questions to randomize the order
shuffle($questions);

// Display the randomized questions
echo "Randomized Quiz Questions:\n";
foreach ($questions as $index => $question) {
    echo ($index + 1) . ". $question\n";
}

এই উদাহরণে, আমাদের কুইজ প্রশ্নের একটি অ্যারে আছে। shuffle ফাংশন ব্যবহার করে, আমরা প্রশ্নের ক্রম এলোমেলো করে দিই। এটি নিশ্চিত করে যে কুইজ গ্রহণকারী ব্যবহারকারীরা প্রতিবার প্রশ্নগুলির একটি ভিন্ন ক্রম পাবে, বৈচিত্র্য যোগ করবে এবং পূর্বাভাসযোগ্যতা (predictability) হ্রাস করবে।

এলোমেলো ক্রমে বিষয়বস্তু যেমন কুইজ, সমীক্ষা বা ওয়েবসাইটে এলোমেলোভাবে নির্বাচিত বিষয়বস্তু প্রদর্শনের মাধ্যমে আপনি ব্যবহারকারীদের জন্য একটি ভিন্ন অভিজ্ঞতা তৈরি করতে চান এমন পরিস্থিতিতে shuffle এই বাস্তব ব্যবহার সহায়ক।

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