PHP Arrays
PHP Arrays পর্ব-৪: PHP Array Data Manipulation Functions

PHP array তে Data কে বিভিন্ন ভাবে manipulation করতে হয়, আর এই Data Manipulation এর মধ্যে আমাদেরকে array তে নতুন Data ঢুকানো, পুরাতন Data আপডেট অথবা রিমুভ ও করতে হয় , একইভাবে আমাদের কে একটি array এর সাথে আরেকটি array কে Merge এবং Combine ও করতে হয়। আরো করতে হয় বিভিন্ন রকমের filtering। আজকের পর্বে আমরা PHP array এর Data এর বিভিন্ন Manipulation গুলো দেখবো। চলুন এক এক করে সবগুলো দেখা যাক :
PHP array_filter() Function
PHP তে array এর মধ্যের Data গুলোকে প্রোগ্রামার এর দেওয়া callback function এর উপর ভিত্তি করে ফিল্টারিং করার জন্য array_filter function টি ব্যবহৃত হয়। চলুন আমরা একটা নির্দিষ্ট array এর value গুলো থেকে Odd এবং even নম্বর গুলোকে array_filter function দিয়ে filtering করে নেই।
<?php function odd($var) { // returns whether the input integer is odd return $var % 2==1; } function even($var) { // returns whether the input integer is even return $var % 2==0; } $array = range(1,20); echo "<pre>"; echo "Odd :"; print_r(array_filter($array, "odd")); echo "Even:"; print_r(array_filter($array, "even")); echo "</pre>"; ?>
Output:
Odd :Array ( [0] => 1 [2] => 3 [4] => 5 [6] => 7 [8] => 9 [10] => 11 [12] => 13 [14] => 15 [16] => 17 [18] => 19 ) Even:Array ( [1] => 2 [3] => 4 [5] => 6 [7] => 8 [9] => 10 [11] => 12 [13] => 14 [15] => 16 [17] => 18 [19] => 20 )
লক্ষ্য করুন , এখানে আমরা 1-20 দিয়ে তৈরী array টি কে দুটি callback function odd এবং even ফাঙ্কশন দিয়ে যথাক্রমে Odd Number গুলো এবং Even Number গুলো filtering করি।
সাধারণত, বাই ডিফল্ট array_filter function টি শুধু array এর value কে নিয়ে কাজ করে তবে আপনি চাইলে শুধু key অথবা key এবং value দুটিকে নিয়েই কাজ করতে পারেন। আর এর জন্য আপনাকে ARRAY_FILTER_USE_KEY এবং ARRAY_FILTER_USE_BOTH দুটি built-in constant ব্যবহার করতে হবে। চলুন একটি উদাহরণ দিয়ে বুঝে নেয়া যাক :
<?php function filterByKey($k){ return ($k=="b" || $k=="e"); } function filterByBoth($v,$k){ return ($k=="b" || $v=="Canada"); } $array=["a"=>"America","b"=>"Bangladesh","c"=>"Canada","d"=>"Denmark","e"=>"England"]; echo "<pre>"; echo "Filtering By Key :"; print_r(array_filter($array, "filterByKey",ARRAY_FILTER_USE_KEY)); echo "Filtering By Both :"; print_r(array_filter($array, "filterByBoth",ARRAY_FILTER_USE_BOTH)); ?>
Output
Filtering By Key :Array ( [b] => Bangladesh [e] => England ) Filtering By Both :Array ( [b] => Bangladesh
এছাড়া আপনি array_filter() ফাঙ্কশন এর মধ্যে regular expression ব্যবহার করেও সব ধরণের ডেটা ফিল্টারিং করতে পারেন। নিচের উদাহরণে আপন দেখতে পাবেন কিভাবে আমরা সেইসব Country List পাবো , যাদের শুরুতে “a” দিয়ে শুরু:
<?php $countries=["a"=>"America","b"=>"Bangladesh","c"=>"Canada","d"=>"Denmark","e"=>"England","australia"]; $filtered_country=array_filter($countries, function($name){ return preg_match('/^a/i',$name); }); print_r($filtered_country); ?>
PHP array_map() Function
PHP তে এক বা একাধিক array এর মধ্যের প্রত্যেকটি Data বা element কে প্রোগ্রামার এর দেওয়া callback function এর উপর ভিত্তি করে যেকোনো operation করার জন্য array_map function টি ব্যবহৃত হয়। চলুন একটা উদাহরণ দিয়ে বুঝে নেয়া যাক ।
<?php function cube($n) { return($n * $n * $n); } $a = array(1, 2, 3, 4, 5); $b = array_map("cube", $a); print_r($b); ?>
Result:
Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 )
একই ভাবে array_map function এ একাধিক array নিয়েও কাজ করতে পারি। নিচের উদাহরণ দেখুন
<?php function show_Spanish($n, $m) { return("The number $n is called $m in Spanish"); } $a = array(1, 2, 3, 4, 5); $b = array("uno", "dos", "tres", "cuatro", "cinco"); echo "<pre>"; echo "Array Mapping :"; $c = array_map("show_Spanish", $a, $b); print_r($c); ?>
Output
Array Mapping :Array ( [0] => The number 1 is called uno in Spanish [1] => The number 2 is called dos in Spanish [2] => The number 3 is called tres in Spanish [3] => The number 4 is called cuatro in Spanish [4] => The number 5 is called cinco in Spanish )
PHP array_walk() Function
Array এর প্রত্যেকটি Member এর উপর user এর বা প্রোগ্রামারের দেওয়া callback function ব্যবহার করার জন্য PHP তে array_walk() ফাঙ্কশনটি ব্যবহৃত হয়। array_walk() ফাঙ্কশন array এর মধ্যের value গুলোকে user define callback function এর প্রথম Parameter হিসেবে পাস করে , আর key গুলোকে দ্বিতীয় Parameter হিসেবে পাস করে। চলুন একটা উদাহরণ দিয়ে ব্যাপারটা আরো ভালোভাবে বুঝে নেয়া যাক :
<?php function arrayValues($value,$key) { echo $value,"<br>"; } function arrayKeys($value,$key) { echo $key,"<br>"; } function arrayKeyVal($value,$key) { echo "$key=$value","<br>"; } $array=["a"=>"America","b"=>"Bangladesh","c"=>"Canada","d"=>"Denmark","e"=>"England"]; echo "<strong>Get Array Values with array_walk Function :</strong><br>"; array_walk($array, "arrayValues"); echo "<br><br>"; echo "<strong>Get Array Keys with array_walk Function :</strong><br>"; array_walk($array, "arrayKeys"); echo "<br><br>"; echo "<strong>Get Array Key and Values with array_walk Function :</strong><br>"; array_walk($array, "arrayKeyVal"); ?>
Output
Get Array Values with array_walk Function : America Bangladesh Canada Denmark England Get Array Keys with array_walk Function : a b c d e Get Array Key and Values with array_walk Function : a=America b=Bangladesh c=Canada d=Denmark e=England
লক্ষ্য করুন, উপরে আমরা array_walk function টির জন্য তিনটা ফাঙ্কশন তৈরী করি , তারমধ্যে arrayValues ফাঙ্কশনের কাজ হচ্ছে array এর value গুলোকে string হিসেবে print করবে এবং arrayKeys ফাঙ্কশনের কাজ হচ্ছে array থেকে শুধু key গুলোকে print করবে, সর্বেশেষ arrayKeyVal ফাঙ্কশনের কাজ হচ্ছে array key এবং value উভয়ই print করবে।
কিছু array_walk ফাঙ্কশন দিয়ে উদাহরণ:
Example-1 Nested Array to HTML Table Generation
<?php function createTableHeader($value,$key){ echo "<th>".ucfirst($key)."</th>"; } function print_row($item) { echo('<tr>'); array_walk($item, 'print_cell'); echo('</tr>'); } function print_cell($item) { echo('<td>'); echo($item); echo('</td>'); } $students=[ ["id"=>1,"name"=>"Masud Alam", "age"=>36], ["id"=>2,"name"=>"Sohel Alam", "age"=>32], ["id"=>3,"name"=>"sahed Alam", "age"=>39] ]; ?> <table border="1"> <?php array_walk($students[0], 'createTableHeader'); ?> <?php array_walk($students, 'print_row');?> </table>
Example-2 Nested Array to HTML Table Generation
<?php function createTableHeader($value,$key){ echo "<th>".ucfirst($key)."</th>"; } function print_row($item) { echo('<tr>'); echo('<td>'); echo(implode('</td><td>', $item)); echo('</td>'); echo('</tr>'); } function print_cell($item) { echo('<td>'); echo($item); echo('</td>'); } $students=[ ["id"=>1,"name"=>"Masud Alam", "age"=>36], ["id"=>2,"name"=>"Sohel Alam", "age"=>32], ["id"=>3,"name"=>"sahed Alam", "age"=>39] ]; echo "<table border=\"1\">"; array_walk($students[0], 'createTableHeader'); array_walk($students, 'print_row'); echo "</table>"; ?>
Example-3 Single Array to HTML Table Generation
<?php function getTable($value,$key){ echo "<tr>"; echo "<th>$key</th><td>$value</td>"; echo "</tr>"; } $student=["id"=>1,"name"=>"Masud Alam", "age"=>36]; echo "<table border=\"1\">"; echo array_walk($student, "getTable"); echo "</table>";
array_walk_recursive Function
Nested array_walk_recursive ফাঙ্কশন টি array_walk ফাঙ্কশনের মতোই Array এর প্রত্যেকটি Member এর উপর user এর বা প্রোগ্রামারের দেওয়া callback function ব্যবহার করার জন্য ব্যবহৃত হয়, তবে সেটি single array এর পরিবর্তে Nested array এর উপর কাজ করে। এটিও Nested array এর মধ্যের value গুলোকে user define callback function এর প্রথম Parameter হিসেবে পাস করে , আর key গুলোকে দ্বিতীয় Parameter হিসেবে পাস করে। চলুন একটা উদাহরণ দিয়ে ব্যাপারটা আরো ভালোভাবে বুঝে নেয়া যাক :
<?php $fruits = ['sweet' => ['a' => 'apple', 'b' => 'banana'], 'sour' => 'lemon']; function test_print($item, $key) { echo "$key holds $item \n"; } echo "<pre>"; array_walk_recursive($fruits, 'test_print'); echo "</pre>"; ?>
Output
a holds apple b holds banana sour holds lemon
array_reduce() Function
PHP তে array এর সব গুলো element কে callback ফাঙ্কশনের মাধ্যমে একটা single Value তে রূপান্তর করার জন্য PHP তে array_reduce function টি ব্যবহৃত হয়। এক্ষেত্রে callback function টি তে দুটি Parameter দিতে হয়, তারমধ্যে প্রথমটি carry হিসেবে ব্যবহৃত হয় এবং দ্বিতীয়টি array এর প্রত্যেকটি item গ্রহণ করার জন্য ব্যবহৃত হয়। চলুন একটা উদাহরণ দেখা যাক :
<?php function sum($carry, $item) { $carry += $item; return $carry; } function product($carry, $item) { $carry *= $item; return $carry; } $a = array(1, 2, 3, 4, 5); $x = array(); echo "<pre>"; var_dump(array_reduce($a, "sum")); // int(15) var_dump(array_reduce($a, "product", 10)); // int(1200), because: 10*1*2*3*4*5 var_dump(array_reduce($x, "sum", "No data to reduce")); // string(17) "No data to reduce" echo "</pre>"; ?>
Output
int(15) int(1200) string(17) "No data to reduce"
array_chunk() Function
একটি নির্দিষ্ট array কে একাধিক array তে বিভক্ত করার জন্য PHP তে array_chunk() function টি ব্যবহৃত হয়। array_chunk() ফাঙ্কশনে প্রথম Parameter টি থাকে যেই array টি একাধিক array বিভক্ত হবে সেটি receive করবে , দ্বিতীয় array টি ব্যবহৃত হবে array টি কতটি খন্ডে বিভক্ত হবে সেটির জন্য , আর তৃতীয় parameter টি ব্যবহৃত হয় খন্ডে খন্ডে বিভক্ত array গুলোতে আগের key থাকবে কিনা তা নির্ধারণের জন্য , আগের index রাখার জন্য আপনাকে তৃতীয় Parameter টি true করে দিতে হবে। বাই ডিফল্ট তৃতীয় Parameter টি false থাকে। চলুন একটা উদাহরণ দিয়ে বিষয়টা বুঝে নেয়া যাক :
<?php $input_array = array('a', 'b', 'c', 'd', 'e'); print_r(array_chunk($input_array, 2)); print_r(array_chunk($input_array, 2, true)); ?>
Output
Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [0] => c [1] => d ) [2] => Array ( [0] => e ) ) Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [2] => c [3] => d ) [2] => Array ( [4] => e ) )
লক্ষ্য করুন, প্রথম array_chunk টিতে তৃতীয় parameter টি true না দেওয়ায় নতুন array গুলোর প্রত্যেকটির পূর্বের key এর পরিবর্তে নতুন key assign হয়েছে। আর দ্বিতীয় array_chunk() ফাঙ্কশনে তৃতীয় Parameter true দেওয়ায়, প্রতিটি নতুন array এর key তে তাদের আগের key গুলোই রয়েছে।
array_slice() Function
একটি নির্দিষ্ট array এর একটা নির্দিষ্ট অংশ কেটে নিয়ে নতুন array তৈরী করার জন্য PHP তে array_slice() function টি ব্যবহৃত হয়। array_slice() ফাঙ্কশনে চারটি Parameter ব্যবহৃত হয়, প্রথমটি ব্যবহৃত হয় যেই array কে slice করবেন সেটার জন্য , দ্বিতীয় Parameter টি Offset অর্থাৎ কোথায় থেকে slice শুরু হবে তার জন্য , তৃতীয় Parameter slicing করা array এর length এর জন্য, অর্থাৎ পূর্বের array এর কত গুলো value নিয়ে নতুন array তৈরী হবে তার জন্য । আর সর্বশেষ Parameter টি ব্যবহৃত হয় আগের key থাকবে কিনা তার জন্য, বাই ডিফল্ট false থাকে। চলুন একটা উদাহরণ দিয়ে আরো ভালো ভাবে বুঝে নেয়া যাক :
<?php $input = array("a", "b", "c", "d", "e"); $output = array_slice($input, 2); // returns "c", "d", and "e" $output = array_slice($input, -2, 1); // returns "d" $output = array_slice($input, 0, 3); // returns "a", "b", and "c" // note the differences in the array keys print_r(array_slice($input, 2, -1)); print_r(array_slice($input, 2, -1, true)); ?>
Output
Array ( [0] => c [1] => d ) Array ( [2] => c [3] => d )
array_column() Functions
Nested Array এর মধ্যের array গুলোর একটি নির্দিষ্ট column এর বিপরীতে সব গুলো value কে print করার জন্য PHP তে array_column() ফাঙ্কশন টি ব্যবহৃত হয়। চলুন একটি উদাহরণ দিয়ে বুঝে নেয়া যাক :
<?php // Array representing a possible record set returned from a database $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ) ); $first_names = array_column($records, 'first_name'); print_r($first_names); ?>
Output
Array ( [0] => John [1] => Sally [2] => Jane [3] => Peter )
আপনি চাইলে তৃতীয় আরেকটি Parameter ব্যবহার করতে পারেন। সে ক্ষেত্রে দ্বিতীয় প্যারামিটার টি তে যেই column name দিবেন সেটির value গুলো আপনার নতুন তৈরী array এর value হিসেবে print হবে। আর তৃতীয় Parameter টি তে যেই column name দিবেন সেটির value গুলো আপনার নতুন তৈরী array এর key হিসেবে print হবে। চলুন একটি উদাহরণ দিয়ে বুঝে নেয়া যাক :
<?php // Array representing a possible record set returned from a database $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe', ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith', ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones', ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe', ) ); $last_names = array_column($records, 'last_name', 'id'); echo "<pre>"; print_r($last_names); echo "</pre>"; ?>
Output
Array ( [2135] => Doe [3245] => Smith [5342] => Jones [5623] => Doe )
লক্ষ্য করুন, এখানে দ্বিতীয় Parameter টি নতুন তৈরী array এর value হিসেবে print হয়েছে , এবং তৃতীয় Parameter টি নতুন তৈরী array এর key হিসেবে print হয়েছে।
array_combine() Functions
দুটি array এর মধ্যে একটিকে key হিসেবে এবং অন্যটিকে value হিসেবে combine করে নতুন array তৈরী করার জন্য PHP তে array_combine() function টি ব্যবহৃত হয়। চলুন একটা উদাহরণ দেখা যাক :
<?php $a = array('green', 'red', 'yellow'); $b = array('avocado', 'apple', 'banana'); $c = array_combine($a, $b); echo "<pre>"; print_r($c); echo "</pre>"; ?>
Output
Array ( [green] => avocado [red] => apple [yellow] => banana )
array_merge() Function
দুই বা ততোধিক array কে একটি array তে Merge করার জন্য PHP তে array_merge() function টি ব্যবহৃত হয়। চলুন একটা উদাহরণ দেখা যাক :
<?php $array1 = array("a","b","c","d"); $array2 = array("e","f","g","h"); $result = array_merge($array1, $array2); echo "<pre>"; print_r($result); echo "</pre>"; ?>
Output
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h )
উল্লেখ্য , যদি Merge করা দুটি array তেই একই string index থাকে, সেক্ষেত্রে দুটি array এর মধ্যে প্রথম array এর একই string index এর value টি overwrite হয়ে হয়ে যাবে। নিচের উদাহরণ লক্ষ্য করুন :
<?php $array1 = array("a"=>"America","b","c","d"); $array2 = array("a"=>"England","f","g","h"); $result = array_merge($array1, $array2); echo "<pre>"; print_r($result); echo "</pre>"; ?>
Output
Array ( [a] => England [0] => b [1] => c [2] => d [3] => f [4] => g [5] => h )
লক্ষ্য করুন , এখানে প্রথম array এর ভ্যালু ‘America’ Overwrite হয়ে গেছে।
array_merge_recursive() Function
দুটি Nested Array কে Merge করে নতুন একটি array তৈরী করার জন্য PHP তে array_merge_recursive() function টি ব্যবহৃত হয়। নিচের উদাহরণটি দেখুন :
<?php $ar1 = array("color" => array("favorite" => "red"), 5); $ar2 = array(10, "color" => array("favorite" => "green", "blue")); $result = array_merge_recursive($ar1, $ar2); print_r($result); ?>
Output:
Array ( [color] => Array ( [favorite] => Array ( [0] => red [1] => green ) [0] => blue ) [0] => 5 [1] => 10 )
array_push() function
PHP তে কোনো একটা array এর শেষে এক বা একাধিক value (ঢুকানোর) পুশ করার জন্য array_push() function টি ব্যবহৃত হয়। চলুন উদাহরণ দেখা যাক :
<?php $stack = array("orange", "banana"); array_push($stack, "apple", "raspberry"); print_r($stack); ?>
Output
Array ( [0] => orange [1] => banana [2] => apple [3] => raspberry )
array_pop() function
PHP তে কোনো একটা array এর শেষ থেকে একটি value বের করে দেওয়ার array_pop() function টি ব্যবহৃত হয়। চলুন উদাহরণ দেখা যাক :
<?php $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_pop($stack); print_r($stack); ?>
Output
Array ( [0] => orange [1] => banana [2] => apple )
array_unshift() function
PHP তে কোনো একটা array এর শুরুতে এক বা একাধিক value ঢুকানোর জন্য array_unshift() function টি ব্যবহৃত হয়। চলুন উদাহরণ দেখা যাক :
<?php $queue = array("orange", "banana"); array_unshift($queue, "apple", "raspberry"); print_r($queue); ?>
Output
Array ( [0] => apple [1] => raspberry [2] => orange [3] => banana )
array_shift() function
PHP তে কোনো একটা array এর শুরুতে একটি value বের করে দেওয়ার array_shift() function টি ব্যবহৃত হয়। চলুন উদাহরণ দেখা যাক :
<?php $stack = array("orange", "banana", "apple", "raspberry"); $fruit = array_shift($stack); print_r($stack); ?>
Output
Array ( [0] => banana [1] => apple [2] => raspberry )
array_splice() function
Array এর মধ্যে এক বা একাধিক element add, replace এবং remove এই ধরণের কাজগুলো করার জন্য PHP তে array_splice() ফাঙ্কশনটি ব্যবহৃত হয়। চলুন কয়েকটি উদাহরণ দিয়ে বুজে নেয়া যাক :
<?php $input = array("red", "green", "blue", "yellow"); array_splice($input, 2); // $input is now array("red", "green") $input = array("red", "green", "blue", "yellow"); array_splice($input, 1, -1); // $input is now array("red", "yellow") $input = array("red", "green", "blue", "yellow"); array_splice($input, 1, count($input), "orange"); // $input is now array("red", "orange") $input = array("red", "green", "blue", "yellow"); array_splice($input, -1, 1, array("black", "maroon")); // $input is now array("red", "green", // "blue", "black", "maroon") $input = array("red", "green", "blue", "yellow"); array_splice($input, 3, 0, "purple"); // $input is now array("red", "green", // "blue", "purple", "yellow"); ?>