PHP Array General Functions Part-3: array_sum, array_product, array_reduce and count function

array_sum(), array_product() count and array_reduce()

PHP Array General Function গুলো নিয়ে তৃতীয় পর্বে আপনাকে স্বাগতম। আজকের পর্বে আমরা array_sum(), array_product(), array_reduce() এবং count() functions এর বিস্তারিত আলোচনা করব।

PHP array_sum() Function

PHP-তে array_sum ফাংশনটি একটি অ্যারের মধ্যে সমস্ত numeric value গুলোর যোগফল গণনা করতে ব্যবহৃত হয়। এটি input হিসেবে একটি array type এর একক প্যারামিটার নেয় , অর্থাৎ যেই array এর জন্য আপনি যোগফল ক্যালকুলেট করতে চান। আরো সহজ করে বললে, php তে কোনো array এর সব গুলো value এর যোগফল বের করতে চাইলে আপনি array_sum() function টি ব্যবহার করতে পারেন।

Syntax:

array_sum(array $array): int|float

Parameter:

array (Required): এটি সেই অ্যারে যার জন্য আপনি এর numeric value গুলোর যোগফল গণনা করতে চান। এটি array_sum ফাংশনের একমাত্র প্যারামিটার। আপনি যে অ্যারেটি প্রক্রিয়া করতে চান তা প্রদান করুন এবং array_sum সেই অ্যারের মধ্যে সমস্ত numeric value গুলো যোগ করবে। তবে অ্যারের মধ্যে অবস্থিত Non-numeric values গুলো ignore করা হয়।

Return Value:

array_sum একটি single numeric value হিসাবে input array এর সমস্ত numeric value গুলোর যোগফল রিটার্ন করে। যদি অ্যারেটি empty থাকে বা কোনো numeric values না থাকে, তাহলে ফাংশনটি 0 (শূন্য) প্রদান করে।

array_sum() ফাঙ্কশন কিভাবে কাজ করে?

যেটা আমরা সংজ্ঞায়, বলেছি array_sum ফাংশন একটি array কে input হিসাবে গ্রহণ করে এবং সেই অ্যারের মধ্যে থাকা সমস্ত numeric value গুলোর সমষ্টি যোগফল ক্যালকুলেট করে। এটি আরও বিস্তারিত কীভাবে কাজ করে তা এখানে দেওয়া হলো:

  • Input: আপনি array_sum ফাংশনে আর্গুমেন্ট হিসাবে একটি array পাস করেন।
  • Iterate Through Array: array_sum অ্যারের element গুলির মাধ্যমে এক এক করে iterate করে।
  • Check for Numeric Values: প্রতিটি element এর জন্য, এটি এলিমেনটির numeric (integer বা floating-point number) কিনা তা পরীক্ষা করে। Non-numeric value, যেমন strings বা অন্যান্য data type গুলো, ignore করা হয়।
  • Accumulate the Sum: যদি এলিমেন্টটি numeric হয়, তবে এটি সেই এলিমেন্টটির value এর একটি accumulator variable এ যোগ করে যা running sum এর ট্র্যাক রাখে।
  • Return the Sum: অ্যারের সমস্ত এলিমেন্টগুলির মাধ্যমে iterating করার পরে, ফাংশনটি ফলাফল হিসাবে accumulated sum কে রিটার্ন করে।

এখানে array_sum এর pseudocode কিভাবে কাজ করতে পারে তার একটি simplified উপস্থাপনা:

function array_sum(array)
    sum = 0  // Initialize the sum to zero
    for each element in array
        if element is numeric
            sum = sum + element  // Add the numeric element to the sum
    return sum

এখানে array_sum ফাংশন ব্যবহার করার একটি উদাহরণ:

$numbers = [10, 20, 30, 40, 50];
$total = array_sum($numbers);
echo "The sum of the numbers is: $total"; // Output: The sum of the numbers is: 150

এই উদাহরণে, array_sum() ফাংশনটিকে অ্যারে $numbers এর parameter হিসাবে ডাকা হয় এবং এটি অ্যারের numeric value গুলোর যোগফল গণনা করে, যার ফলে 150 হয়।

নিম্নে array এর value হিসেবে float নম্বর ব্যবহার করে আরো একটি উদাহরণ দেওয়া হলো :

$b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);
echo "sum(b) = " . array_sum($b) . "\n";  //Output: sum(b) = 6.9

তবে array_sum ফাংশনটি তার strings value গুলিকে float এ রূপান্তর করে এবং যদি উক্ত string গুলো পরিবর্তনযোগ্য না হয়, টি তাহলে সেই strings গুলিকে ignores করে :

<?php
$a = array("String", 2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "\n"; //Output: sum(a) = 20

$b = array("12.3456", 2, 4, 6, 8);
echo "sum(b) = " . array_sum($b) . "\n"; //Output: sum(b) = 32.3456
?>

আপনি যদি multi-dimensional array এর যোগফল গণনা করতে চান? সেক্ষেত্রে নিন্মোক্ত কৌশল অবলম্বন করতে পারেন:

<?php
function array_multisum(array $arr): float {
    $sum = array_sum($arr);
    foreach($arr as $child) {
        $sum += is_array($child) ? array_multisum($child) : 0;
    }
    return $sum;
}
?>

Usage Example:

<?php
$data = 
[
    'a' => 5,
    'b' => 
    [
        'c' => 7, 
        'd' => 3
    ],
    'e' => 4,
    'f' => 
    [
        'g' => 6,
        'h' => 
        [
            'i' => 1,
            'j' => 2
        ]
    ]
];

echo array_multisum($data);

//output: 28
?>

এটা মনে রাখা গুরুত্বপূর্ণ যে array_sum শুধুমাত্র numeric value গুলির সাথে কাজ করে এবং non-numeric value গুলিকে ignore করে, যা এটিকে আপনার কোডে স্পষ্ট লুপ বা শর্তসাপেক্ষ চেকের প্রয়োজন ছাড়াই একটি অ্যারেতে numeric ডেটার যোগফল দ্রুত ক্যালকুলেট করার জন্য একটি সুবিধাজনক টুল করে তোলে৷

PHP array_product() Function

PHP-তে array_product() ফাংশনটি একটি অ্যারের মধ্যে থাকা সমস্ত মানগুলির গুণফল গণনা করতে ব্যবহৃত হয়। এটি input হিসেবে একটি একক array প্যারামিটার গ্রহণ করে, অর্থাৎ আপনি যে অ্যারে টির গুনফল গণনা করতে চান। নিম্নে array_product() ফাঙ্কশনের সিনটেক্স দেওয়া হলো:

array_product(array $array): int|float

Parameter:

array (Required): এটি সেই array যার জন্য আপনি এর মানগুলির গুণফল গণনা করতে চান। এটি array_product() ফাংশনের একমাত্র প্যারামিটার। আপনি যে অ্যারেটি প্রক্রিয়া করতে চান তা প্রদান করুন এবং array_product() সেই অ্যারের মধ্যে থাকা সমস্ত মানকে গুণ করবে। এছাড়া অ্যারের Non-numeric মানগুলিকে 1 হিসাবে বিবেচনা করা হয়।

Return Value:

array_product ইনপুট অ্যারের সমস্ত মানের গুণফলকে একটি single numeric value হিসাবে return করে। অ্যারেটি ফাঁকা থাকলে, এটি 1 রিটার্ন করে।

array_product() ফাঙ্কশন কিভাবে কাজ করে?

ইতিমধ্যে আপনি জানেন, PHP-তে array_product() ফাংশনটি একটি অ্যারের মধ্যে থাকা সমস্ত মানগুলির গুণফল গণনা করতে ব্যবহৃত হয়। এটি আরও বিশদে কীভাবে কাজ করে তা এখানে:

  • Input: আপনি array_product ফাংশনে আর্গুমেন্ট হিসেবে একটি অ্যারে পাস করেন।
  • Iterate Through Array: array_product অ্যারের element গুলির মাধ্যমে একের পর এক iterate করে।
  • Multiplication: প্রতিটি এলিমেন্টের জন্য, এটি running product এর সাথে এলিমেন্টের মানকে গুণ করে। running product এর initial মান হল 1।
  • Check for Numeric Values: যদি উপাদানটি numeric হয় (integer অথবা floating-point number), তাহলে এটি multiplication এর মধ্যে অন্তর্ভুক্ত করা হয়। Non-numeric মান, যেমন strings বা অন্যান্য data types, সেগুলিকে 1 হিসাবে বিবেচনা করা হয় এবং সেই অনুযায়ী প্রোডাক্টে অন্তর্ভুক্ত করা হয়।
  • Accumulate the Product: সমস্ত numeric এবং গণনা করা numeric মানগুলিকে গুণ করার ফলাফল চলমান প্রোডাক্টে সংরক্ষণ করা হয়।
  • Return the Product: অ্যারের সমস্ত উপাদানগুলির মাধ্যমে iterate করার পরে, ফাংশনটি result হিসাবে থাকা product টি return দেয়।

এখানে array_product pseudocode কিভাবে pseudocode কাজ করতে পারে তার একটি সরলীকৃত উপস্থাপনা দেওয়া হলো:

function array_product(array)
    product = 1  // Initialize the product to 1
    for each element in array
        if element is numeric
            product = product * element  // Multiply the numeric element with the product
        else
            product = product * 1  // Treat non-numeric values as 1
    return product

এখানে array_product() ফাংশন ব্যবহার করার একটি উদাহরণ দেওয়া হলো:

$numbers = [2, 3, 5, 7];
$product = array_product($numbers);
echo "The product of the numbers is: $product"; // Output: The product of the numbers is: 210

এই উদাহরণে, array_product() ফাংশনটিকে array $numbers এর parameter হিসাবে বলা হয়। এটি অ্যারের মানগুলির গুণফল গণনা করে, যার ফলে 210 (2 * 3 * 5 * 7) হয়।

যদি অ্যারেতে non-numeric value থাকে, যেমন strings, সেগুলিকে গুণে 1 হিসাবে বিবেচনা করা হয়। উদাহরণ স্বরূপ:

$mixedArray = [2, 3, 'abc', 5, 'def', 7];
$product = array_product($mixedArray);
echo "The product of the mixed array is: $product"; // Output: The product of the mixed array is: 210

এই ক্ষেত্রে, non-numeric value গুলো যেমন : ‘abc’ এবং ‘def’ ইগনোর করা হয়, এবং ফলাফল 210 (2 * 3 * 1 * 5 * 1 * 7) থাকে ।

range এবং array_product ফাংশন এর সাহায্যে আপনি কীভাবে একটি প্রদত্ত সংখ্যার factorial বের করতে পারেন তা এখানে দেওয়া হলো :

function factorial($num) {
    return array_product(range(1, $num));
}

printf("%d", factorial(5)); //120

আপনি যদি multi-dimensional array এর গুনফল গণনা করতে চান? সেক্ষেত্রে নিন্মোক্ত কৌশল অবলম্বন করতে পারেন:

<?php
function array_multiproduct(array $arr): float {
    $product = array_product($arr);
    foreach($arr as $child) {
        $product *= is_array($child) ? array_multiproduct($child) : 1;
    }
    return $product;
}
?>

Example:

<?php
$data = 
[
    'a' => 5,
    'b' => 
    [
        'c' => 7, 
        'd' => 3
    ],
    'e' => 4,
    'f' => 
    [
        'g' => 6,
        'h' => 
        [
            'i' => 1,
            'j' => 2
        ]
    ]
];

echo array_multiproduct($data);

//output: 5040
?>

এটা মনে রাখা গুরুত্বপূর্ণ যে array_product শুধুমাত্র numeric value গুলির সাথে কাজ করে এবং non-numeric value গুলিকে 1 হিসেবে বিবেচনা করে, যা এটিকে আপনার কোডে স্পষ্ট লুপ বা শর্তসাপেক্ষ চেকের প্রয়োজন ছাড়াই একটি অ্যারেতে numeric ডেটার গুণফল দ্রুত ক্যালকুলেট করার জন্য একটি সুবিধাজনক টুল করে তোলে৷

PHP array_reduce() Function

PHP -তে array_reduce function টি user-defined callback function ব্যবহার করে একটি অ্যারেকে iteratively reduce করে একটি single value তে অর্থাৎ একক মানেতে বা ফলাফলে নিয়ে আসতে ব্যবহৃত হয়। এই ফাংশনটি বেশ বহুমুখী এবং কলব্যাক ফাংশনের লজিকের উপর ভিত্তি করে একটি একক ফলাফল সংগ্রহ করে আপনাকে অ্যারের উপাদানগুলিতে কাস্টম অপারেশন করতে দেয়৷

এখানে array_reduce() function এর মৌলিক সিনট্যাক্স দেওয়া হলো:

array_reduce(array $array, callable $callback, mixed $initial = null): mixed
  • $array: এটি হল ইনপুট অ্যারে যা আপনি একক মানে বা value তে নিয়ে আসতে চান।
  • $callback: একটি callable function যা কি ধরণের reduction operation হবে তা সংজ্ঞায়িত করে। কলব্যাক ফাংশন দুটি আর্গুমেন্ট নেয়:
    • $carry: যা previous iteration এর রিটার্ন মান ধরে রাখে; এবং first iteration এর ক্ষেত্রে এটি এর পরিবর্তে initial value ধারণ করে।
    • $item: যা current iteration এর value ধরে রাখে।
  • $initial (optional): $carry এর জন্য একটি optional initial value. যদি এই মানটি দেওয়া থাকে , কলব্যাক ফাংশন এই প্রাথমিক মান দিয়ে শুরু হয়; অন্যথায়, অ্যারের প্রথম এলিমেন্টটি প্রাথমিক মান হিসাবে ব্যবহৃত হয়। আর অ্যারে খালি থাকলে চূড়ান্ত ফলাফল হিসাবে ব্যবহার করা হবে।

array_reduce() ফাঙ্কশন কিভাবে কাজ করে?

যা ইতিমধ্যে আপনি জেনেছেন , PHP -তে array_reduce function টি user-defined callback function ব্যবহার করে একটি অ্যারেকে iteratively reduce করে একটি single value তে অর্থাৎ একক মানেতে বা ফলাফলে নিয়ে আসতে ব্যবহৃত হয়। এটি আরও বিশদে কীভাবে কাজ করে তা এখানে:

  • Initialization: যদি একটি initial value প্রদান করা হয়, array_reduce() $carry কে সেই প্রাথমিক value তে সেট করে। যদি তা না হয় তবে এটি অ্যারের প্রথম উপাদানটিকে initial carry value হিসাবে ব্যবহার করে।
  • Iteration: array_reduce() অ্যারের মাধ্যমে element by element iterate করে।
  • Callback Function: অ্যারের প্রতিটি উপাদানের জন্য, এটি আপনার প্রদান করা কলব্যাক ফাংশনকে কল করে। কলব্যাক ফাংশন দুটি আর্গুমেন্ট গ্রহণ করে: current carry value (step 1 এ শুরু করা হয়েছে) এবং current array element
  • Update Accumulator: কলব্যাক ফাংশনের ভিতরে, আপনি current element এবং carry এর উপর সঞ্চালিত অপারেশনটি সংজ্ঞায়িত করেন। এই অপারেশনের ফলাফল পরবর্তী iteration এর জন্য নতুন carry এর মান হয়ে যায়।
  • Repeat: সমস্ত এলিমেন্ট প্রসেস না হওয়া পর্যন্ত অ্যারের প্রতিটি এলিমেন্টের জন্য ধাপ 3 এবং 4 পুনরাবৃত্তি করা হয়।
  • Return Result: সমস্ত উপাদান প্রক্রিয়াকরণের পর, array_reduce() operation এর ফলাফল হিসাবে চূড়ান্ত carry এর মানটি রিটার্ন দেওয়া হয়।

এখানে array_reduce() function এর pseudocode কিভাবে কাজ করতে পারে তার একটি simplified উপস্থাপনা:

function array_reduce(array, callback, initial)
    if initial is provided
        carry = initial
    else
        carry = first element of array
    for each element in array
        carry = callback(carry, element)
    return carry

এখানে একটি অ্যারের সমস্ত element এর যোগফল গণনা করতে array_reduce() ফাঙ্কশন ব্যবহার করার একটি উদাহরণ দেওয়া হলো:

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

// Use array_reduce to calculate the sum
$sum = array_reduce($numbers, function ($carry, $current) {
    return $carry+ $current;
}, 0);

echo "The sum is: $sum"; // Output: The sum is: 15

এই উদাহরণে, $numbers অ্যারের সমস্ত উপাদান যোগ করতে আমরা array_reduce() function ব্যবহার করি। কলব্যাক ফাংশন $carry এবং current element ($current) গ্রহণ করে এবং আপডেট করা $carry (এই ক্ষেত্রে $carry এবং $current এর সমষ্টি) প্রদান করে।

এখানে একটি অ্যারের সমস্ত element এর গুনফল গণনা করতে array_reduce() ফাঙ্কশন ব্যবহার করার একটি উদাহরণ দেওয়া হলো:

<?php 
$numbers = [1, 2, 3, 4, 5];
 
// Use array_reduce to calculate the sum
$multiplication = array_reduce($numbers, function ($carry, $current) {
    return $carry* $current;
}, 1);
 
echo "The multiplication is: $multiplication"; // Output: The sum is: 120

PHP Array count() function

PHP-তে, count() ফাংশনটি একটি array এর element এর সংখ্যা বা একটি object এর property গুলো count করতে ব্যবহৃত হয়। এর প্রাথমিক উদ্দেশ্য হল একটি অ্যারে বা অবজেক্টের size বা length নির্ধারণ করা। নিম্নে এর বেসিক সিনট্যাক্স দেওয়া হলো:

count(array, mode)
  • array: যে array বা object এর জন্য আপনি element বা property গুলো গণনা করতে চান।
  • mode (optional): একটি optional parameter যা গণনার মোড নির্দিষ্ট করে। এটি নিম্নলিখিত মানগুলির মধ্যে যেকোনো একটি নিতে পারে:
    • COUNT_NORMAL (default): element বা Property এর সংখ্যা প্রদান করে।
    • COUNT_RECURSIVE: Recursively nested arrays বা object এর মধ্যে থাকা সমস্ত element গুলিকে গণনা করে।

count() ফাঙ্কশন কিভাবে কাজ করে?

PHP তে count() ফাংশন কীভাবে কাজ করে তার একটি pseudocode representation এখানে দেওয়া হলো :

function count(data, mode = COUNT_NORMAL)
    if data is an array
        if mode is COUNT_NORMAL
            count = 0  // Initialize a counter
            for each element in data
                increment count by 1
            end for
        else if mode is COUNT_RECURSIVE
            count = 0  // Initialize a counter
            for each element in data
                if element is an array
                    increment count by count(element, COUNT_RECURSIVE)
                else
                    increment count by 1
                end if
            end for
        end if
    else if data is an object
        propertyArray = get_object_vars(data)  // Get object properties as an array
        count = length of propertyArray
    else
        count = 0  // Return 0 for non-array and non-object data
    
    return count  // Return the count of elements or properties
end function

এই pseudocode এ :

  • ডেটা সেই array বা object এর প্রতিনিধিত্ব করে যার জন্য আপনি elements বা properties গণনা করতে চান।
  • mode (optional) মোড নির্দিষ্ট করে এবং COUNT_NORMAL (ডিফল্ট) বা COUNT_RECURSIVE হতে পারে।

ফাংশনটি প্রথমে পরীক্ষা করে যে ডেটাটি একটি array বা একটি object. type এবং counting mode এর উপর নির্ভর করে, এটি elements বা properties গণনা করে। যদি COUNT_RECURSIVE mode ব্যবহার করা হয়, তবে এটি নেস্টেড অ্যারেগুলির মধ্যে সমস্ত element কে recursively গণনা করে। অবশেষে, ফাংশন একটি integer হিসাবে গণনা রিটার্ন করে।

এই pseudocode টি count() ফাংশনের basic logic প্রদর্শন করে, যা পিএইচপি-তে ডেটা স্ট্রাকচারের elements বা properties গণনা করতে ব্যবহৃত হয়।

count() ফাংশনটি কীভাবে ব্যবহার করবেন তার কয়েকটি উদাহরণ নিম্নে দেওয়া হলো :

উদাহরণ ১: Array তে Element গুলো গণনা করা:

<?php 
$fruits = array("apple", "banana", "cherry");
$count = count($fruits);
echo "Number of fruits: " . $count; // Output: Number of fruits: 3

উদাহরণ ২: Object এ Property গুলো গণনা করা:

class MyObject {
    public $prop1;
    protected $prop2;
    private $prop3;
}

$obj = new MyObject();
$count = count(get_object_vars($obj));
echo "Number of object properties: " . $count; // Output: Number of object properties: 2

উদাহরণ ৩: COUNT_RECURSIVE mode ব্যবহার করে গণনা করা:

$nestedArray = array("a", "b", array("c", "d", array("e", "f")));
$count = count($nestedArray, COUNT_RECURSIVE);
// $count will be 8, counting all elements, including those within nested arrays.

উদাহরণ ৪: COUNT_RECURSIVE mode ব্যবহার করে আরো একটি বাস্তব উদাহরণ:

আপনি যদি element গুলোর মোট সংখ্যা নির্ধারণ করতে COUNT_RECURSIVE মোড সহ count() ফাংশন ব্যবহার করে একটি directory এবং এর subdirectories গুলির মধ্যে সমস্ত files এবং ফোল্ডারের নাম স্ক্যান করতে চান এবং গণনা করতে চান তবে আপনি এটি নিম্নরূপ করতে পারেন:

<?php 
function listDirectoryContents($dir) {
    $contents = scandir($dir);
    $result = [];

    foreach ($contents as $item) {
        if ($item != "." && $item != "..") {
            $path = $dir . DIRECTORY_SEPARATOR . $item;
            if (is_dir($path)) {
                // Recursively list subdirectory contents
                $result[$item] = listDirectoryContents($path);
            } else {
                $result[] = $item;
            }
        }
    }

    return $result;
}

$directoryPath = 'D:\mocks'; // Change to your target directory
$directoryContents = listDirectoryContents($directoryPath);

print_r(count($directoryContents,COUNT_RECURSIVE));
// Output the resulting directory structure
//echo json_encode($directoryContents, JSON_PRETTY_PRINT);

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