# কমন এ্যারে ফাংশনস

পিএইচপিতে এ্যারে নিয়ে কাজ করার জন্য প্রচুর ফাংশন রয়েছে । এগুলোর পূর্নাঙ্গ তালিকা পাওয়া যাবে ম্যানুয়ালে - [Array Functions](http://php.net/manual/en/ref.array.php) সেকশনে । এই চ্যাপ্টারে আমরা বেশি প্রচলিত কিছু এ্যারে সংশ্লিষ্ট ফাংশন সম্পর্কে জানবো । পরবর্তীতে বাকি এ্যারে ফাংশনগুলোও কাভার করা হবে এখানে ।

এই চ্যাপ্টারটির বেশীরভাগ কন্টেন্ট, বিশেষ করে উদাহরণগুলো পিএইচপি ম্যানুয়াল থেকে নেওয়া । এখানে বাংলায় ব্যখ্যা করা হয়েছে ফাংশনগুলো । নবীনদের জন্য যতটুকু প্রয়োজন ঠিক ততটুকু রাখা হয়েছে । এ্যাডভান্সড কিছু জিনিস ইচ্ছাকৃতভাবেই সংযোজন করা হয়নি ।

উদাহরণগুলোর আউটপুট ইচ্ছাকৃতভাবেই বইতে দেখানো হয়নি । কোড নিজে থেকে রান করে আউটপুট দেখে বোঝার চেষ্টা করার সুযোগ দেওয়ার জন্যই এমনটি করা হয়েছে ।

## count()

একটি এ্যারেতে কতগুলি এলিমেন্ট আছে তা জানতে আমরা এই ফাংশনটি ব্যবহার করে থাকি ।

```php
<?php

$array = array(1,2,3);
echo count($array);
```

এই ফাংশনটি সেকেন্ড প্যারামিটার হিসেবে `COUNT_NORMAL` কিংবা `COUNT_RECURSIVE` কন্সট্যান্ট এ্যাক্সেপ্ট করে । এই প্যারামিটারটি অপশনাল । ডিফল্ট ভ্যালু হিসেবে `COUNT_NORMAL` থাকে । এই মোডে সে শুধু প্রদত্ত এ্যারের কতগুলো আইটেম আছে সেটা হিসেব করে । যখন আমরা `COUNT_RECURSIVE` ব্যবহার করি তখন এই ফাংশনটি মাল্টি ডাইমেনশনাল এ্যারের ক্ষেত্রে সব গুলো এ্যারের এলিমেন্ট হিসেব করে । অর্থাৎ মূল এ্যারের মধ্যে অন্য কোন এ্যারে থাকলে সেগুলোর এলিমেন্টও গননায় রাখা হবে ।

```php
<?php
$food = array('fruits' => array('orange', 'banana', 'apple'),
              'veggie' => array('carrot', 'collard', 'pea'));

// রিকার্সিভ মোড
echo count($food, COUNT_RECURSIVE); // মোট ৮টি এলিমেন্ট 

// নরমাল মোড
echo count($food); // ২টি আইটেম
```

## array\_key\_exists

আমাদের এ্যারেতে নির্দিষ্ট নামের কোন কি আছে কিনা তা জানার জন্য আমরা এই ফাংশনটি ব্যবহার করি । ঐ নামের ফাংশন থাকলে আমরা বুলিয়ান `true` পাই, আর না থাকলে `false` ।

```php
<?php
$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
    echo "The 'first' element is in the array";
}
```

## array\_keys

নাম শুনেই বোঝা যাচ্ছে কোন এ্যারে এর কি গুলো পাবো আমরা এই ফাংশন থেকে । এই ফাংশনটির ২য় প্যারামিটার হিসেবে আমরা একটা ওয়ার্ড দিয়ে দিতে পারি, সেক্ষেত্রে শুধুমাত্র যে সকল কি এর মধ্যে ঐ ওয়ার্ডটি থাকবে সেগুলোই রিটার্ন করবে । ৩য় প্যারামিটারটি হচ্ছে `===` কম্প্যারিজনের জন্য । অর্থাৎ, এটার ভ্যালু ট্রু হলে আগের দেওয়া ওয়ার্ডটি সার্চ করার সময় টাইপ বিবেচনা করা হবে । ২য় এবং ৩য় প্যারামিটার অপশনাল ।

উদাহরণ:

```php
<?php
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));

$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));
```

## array\_values

আগের ফাংশনটির সাথে মিল রেখেই এটি এ্যারের ভ্যালুগুলো রিটার্ন করে । যেমন:

```php
<?php
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
```

## in\_array

এই ফাংশনটি একটি এ্যারেতে একটি নির্দিষ্ট ভ্যালু আছে কিনা তা জানায় । ৩য় প্যারামিটারটি অপশনাল । বুলিয়ান `true` পাস করলে সার্চ করার সময় টাইপও ম্যাচ করে ।

```php
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
if (in_array("mac", $os)) {
    echo "Got mac";
}
```

## array\_pop

এই ফাংশনটি প্রদত্ত এ্যারের শেষ আইটেমটি রিটার্ন করে । এবং একই সাথে ঐ আইটেমটি এ্যারে থেকে রিমুভ করে দেয় ।

উদাহরণ:

```php
<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
print_r($stack);
```

## array\_push

আগের ফাংশনটির ঠিক উল্টো কাজ করে এই ফাংশনটি । এটির কাজ কোন এ্যারের শেষে এক বা একাধিক আইটেম যোগ করা । যেমন:

```php
<?php
$stack = array("orange", "banana");
array_push($stack, "apple", "raspberry");
print_r($stack);
```

এই ফাংশনের প্রথম আর্গুমেন্টটি হবে একটি এ্যারে । এরপর আমরা যে এলিমেন্টগুলো যোগ করতে চাই সেগুলো যোগ করবো ।

## array\_shift

`array_pop` এ্যারের শেষ থেকে আইটেম বাদ দিতো, `array_shift` এর কাজ শুরু থেকে বাদ দেওয়া । এটি এ্যারের প্রথম আইটেমটি রিটার্ন করে এবং ঐ আইটেমটি এ্যারেটি থেকে রিমুভ করে দেয় ।

উদাহরণ:

```php
<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack);
```

## array\_unshift

নাম শুনেই বুঝতে পারার কথা এটা কি করে । `array_push` এর মত করেই এই ফাংশনটি এ্যারের শুরুতে আইটেম যোগ করে । উদাহরণ:

```php
<?php
$queue = array("orange", "banana");
array_unshift($queue, "apple", "raspberry");
print_r($queue);
```

## array\_flip

এই ফাংশনটি এ্যারের কি আর ভ্যালু ইন্টারচেইনজ করে দেয় । অর্থাৎ কি গুলো হয়ে যায় ভ্যালু আর ভ্যালুগুলো হয়ে যায় কি । যেমন:

```php
<?php
$trans = array("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip($trans);
print_r($trans);
```

## array\_reverse

এই ফাংশনটি এ্যারের আইটেমগুলোর অর্ডার বা ক্রমিক উল্টো করে দেয় । অর্থাৎ প্রথম আইটেমটি শেষে আর শেষের আইটেমটি শুরুতে আসে । এবং অন্যান্য আইটেমগুলিও একইভাবে উল্টো অর্ডারে নিয়ে আসা হয় ।

আমরা যদি আইটেমের অর্ডার পরিবর্তন হলেও তার আগের কি এর ভ্যালু ঠিক রাখতে চাই তাহলে ২য় আর্গুমেন্টটির ভ্যালু বুলিয়ান `true` পাস করলেই হবে ।

```php
<?php
$input  = array("php", 4.0, array("green", "red"));
$reversed = array_reverse($input);
$preserved = array_reverse($input, true);

print_r($input);
print_r($reversed);
print_r($preserved);
```

## array\_merge

দুই বা ততোধিক এ্যারে মার্জ করে একটি নতুন এ্যারে তৈরি করে এই ফাংশনটি । স্ট্রিং কি এর ক্ষেত্রে যদি একই নামের কি থাকে তবে শেষের এ্যারের একই নামের কি এর ভ্যালু ব্যবহৃত হয় । নিউমেরিক ইনডেক্স এর ক্ষেত্রে আইটেমগুলো একটার পর একটা এ্যাড করে নেয় । কি নিয়ে কোন কনফ্লিক্ট হয় না ।

```php
<?php
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
```

## array\_rand

কোন এ্যারে থেকে এক বা একাধিক র‍‍্যান্ডম আইটেম বেছে নেয় এই ফাংশনটি । ঐ নির্বাচিত আইটেমগুলোর কি রিটার্ন করে । প্রথম প্যারামিটার হিসেবে এ্যারেটি এ্যাক্সেপ্ট করে । ২য় আর্গুমেন্ট হিসেবে আমরা পাস করতে পারি কতগুলো আইটেম বেছে নিবে । ২য় প্যারামিটারটি অপশনাল ।

যখন একটি মাত্র এন্ট্রি বেছে নেয় তখন এই ফাংশনটি সরাসরি তার কি রিটার্ন করে । তবে একাধিক আইটেম এর বেলায় সে কি গুলো একটি এ্যারেতে রিটার্ন করে ।

```php
<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
```

## array\_search

একটি এ্যারের ভিতরে সার্চ করার জন্য এই ফাংশনটি ব্যবহৃত হয় । যদি এ্যারেতে ওয়ার্ডটি থাকে তবে ঐ আইটেম এর কি টা রিটার্ন করে । যদি ওয়ার্ডটি স্ট্রিং হয় তবে সার্চটি হবে কেইস সেনসিটিভ । অর্থাৎ আপার কেইস ও লোয়ার কেইস এর ভ্যারিয়েশন তখন ম্যাটার করবে । (Masnun আর masnun তখন এক হবে না) । ২য় প্যারামিটারটি অপশনাল । এটি স্ট্রিক্ট (`===`) কম্প্যারিজন এর জন্য । এটির ভ্যালু বুলিয়ান `true` পাস করলে সার্চ করার সময় টাইপও মিলিয়ে দেখা হবে ।

```php
<?php
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');

$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array);   // $key = 1;
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://php.howtocode.dev/common-array-functions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
