فراخوانی توابع بی نام با استفاده از تابع array_filter در پی‌اچ‌پی و کاربرد آن در طراحی سایت و اپلیکشن‌های سمت سرور

 تابع array_filter یک آرایه و تابع دریافت می‌کند و تابع مورد نظر را به‌ازای هر یک از اعضای آرایه فراخوانی میکند این تابع می‌تواند در فراخوانی توابع بدون نام مفید باشد.

تابع array_filter سه آرگومان دریافت میکنه اولین آرگومان این تابع  یک آرایه و اجباری است، دومین آرگومان یک تابع است که میتونه  یک تابع با نام و بی نام باشه و مانند اولین آرگومان اجباریه  سومین آرگومان این تابع اختیاری است و مشخص میکنه که تابع مورد نظر  (دومین آرگومان) به‌ازای اعضای آرایه (اولین آرگومان) فراخوانی شود یا به‌ازی اندیس‌های آرایه به عبارت دیگر این آرگومان ورودی تابع مورد نظر  را تعیین می‌کند.

خروجی این تابع یک آرایه است که شامل قسمتی یا همه‌ی اعضای آرایه ورودی است به طوری که به ازای هر عضو از آرایه‌ی ورودی که تابع مورد نظر دارای مقدار برگشتی صحیح باشد این عضو در آرایه‌ی خروجی قرار می‌گیرد.
مثال:

<?php
$input = array(1,2,3,4,5,6,);
$filter_even=function($item) {
return ($item%2)==0;
};
$output=array_filter($input,$filter_even);
print_r($output);
echo ‘<br>’;
//نیازی به انتساب تابع به یک متغیر نیست.می‌توان این کد را به صورت زیر نوشت
$output=array_filter($input,function($item) {
return ($item%2)==0;
});
print_r($output); ?>

خروجی مثال:

Array ( [1] => 2 [3] => 4 [5] => 6 ) 
Array ( [1] => 2 [3] => 4 [5] => 6 )

در مثال زیر دو تابع تعریف کردیم که اولی فرد بودن و دومی زوج بودن عدد وروی را مشخص می‌کند سپس این توابع را با استفاده از تابع array_filter فراخوانی کردیم به آرایه ورودی و خروجی و اندیس آرایه‌ی ورودی دفت نمائید:

<?php
function odd($var)
{
// returns whether the input integer is odd
return($var & 1);
}

function even($var)
{
// returns whether the input integer is even
return(!($var & 1));
}

$array1 = array(“a”=>1, “b”=>2, “c”=>3, “d”=>4, “e”=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);

echo “<br>Odd :\n”;
print_r(array_filter($array1, “odd”));
echo “<br>Even:\n”;
print_r(array_filter($array2, “even”));
?>

خروجی این مثال:

Odd : Array ( [a] => 1 [c] => 3 [e] => 5 ) 
Even: Array ( [0] => 6 [2] => 8 [4] => 10 [6] => 12 )

اگر این تابع آرگومان دوم را نداشته باشد از تمامی اعضای آرایه‌ی ورودی که ارزش false دارند چشم پوشی می‌شود و اعضایی که ارزش true داردند در خروجی قرار می‌گیرند به مثال زیر توجه کنید:

<?php

$entry = array(
۰ => ‘foo’,
۱ => false,
۲ => -1,
۳ => null,
۴ => ”
);

print_r(array_filter($entry));
?>

خروجی مثال:

Array ( [0] => foo [2] => -1 )

در مثال زیر از آرگومان سوم این تابع نیز استفاده شده است که در فراخوانی اول تابع array_filter تابع مورد نظر را روی کلید های آرایه‌ی ورودی اعمال می‌کند و به ازای هر کلیدی که مقدرا برگشتی تابع مورد نظر  صحیح باشه  در خروجی قرار میگیره و در مثال دوم تابع روی اعضای آرایه‌ی ورودی اعمال میشه و  به ازای هر عضو از آرایه  که مقدرا برگشتی تابع مورد نظر  صحیح باشه  در خروجی قرار میگیره.

<?php
$arr = [‘a’ => 1, ‘b’ => 2, ‘c’ => 3, ‘d’ => 4];
echo “<br>”;
var_dump(array_filter($arr, function($k) {
return $k == ‘b’;
}, ARRAY_FILTER_USE_KEY));
echo “<br>”;
var_dump(array_filter($arr, function($v, $k) {
return $k == ‘b’ || $v == 4;
}, ARRAY_FILTER_USE_BOTH));
?>

به خروجی این مثال دقت کنید: (تو جه کنید که خط یک و چهار ممکنه در اجرای شما متفاوت باشه)

/var/www/html/test filter array.php:55:
array (size=1)
‘b’ => int 2

/var/www/html/test filter array.php:59:
array (size=2)
‘b’ => int 2
‘d’ => int 4 

یک مثال کاربردی و جالب دیگه از سایت php.net :

اگه میخواین تمامی قسمت های یک رشته را که ارزش false دارند را از آرایه حذف کنید این تابع را با استفاده از تابع strlen برای رشته‌ی مورد نظر فراخوانی کنید

<?php

// removes all NULL, FALSE and Empty Strings but leaves 0 (zero) values
$result array_filter$array‘strlen’ );

?>

 مثال بالا را می‌توان به ارایه نیز تعمیم

 

فایل تمام مثالهای این مقاله را می‌توانید از لینک زیر دانلود نمائید
test filter array-طراحی سایت

 

ممکنه مطالب زیر هم کمکتون کنه:

فراخوانی پویا با استفاده از تابع call_user_func_array 

 

منبع: ترجمه شده از وب سایت php.net

لینک انگلیسی مطلب: http://ir2.php.net/manual/en/function.array-filter.php

امیدوارم این مطلب به دردتون بخوره .
خوشحال میشم اگه نظر خودتون را در مورد این مطلب برام ارسال کنید.

برای ارسال مطالب خود جهت نمایش در سایت، پیشنهاد، ایده، سفارش پروژه طراحی سایت و هرگونه درخواست دیگر از طریق قسمت  تماس با ما  ارتباط برقرار کنید

دیدگاه خود را بنویسید