PHP/array filter
الدالة array_filter()
(PHP 4 >= 4.0.6, PHP 5, PHP 7)
تُرشِّح الدالة array_filter() عناصر المصفوفة باستخدام دالة يحددها المستخدم.
الوصف
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
تمر الدالة array_filter() على كل عنصر من المصفوفة array وتمرِّره كوسيط إلى الدالة callback. إذا أعادت الدالة callback القيمة true، فسيدخل العنصر الحالي من المصفوفة array إلى مصفوفة النتائج. تحافظ الدالة على المفاتيح المرتبطة بالقيم.
المعاملات
array
المصفوفة التي ستعمل عليها الدالة.
callback
الدالة التي يحددها المستخدم لترشيح عناصر المصفوفة.
إذا لم تُمرر أي دالة، فستُمحى كل عناصر المصفوفة المساوية للقيمة false.
flag
تحدد المعاملات التي ستُمرر إلى الدالة callback:
- ARRAY_FILTER_USE_KEY يمرر المفتاح كمعامل وحيد إلى الدلة callback.
- ARRAY_FILTER_USE_BOTH يمرر كلًا من القيمة والمفتاح إلى الدالة callback كوسائط.
القيم المعادة
تعيد المصفوفة المصفََاة.
سجل التغييرات
الإصدار | الوصف |
5.6.0 | إضافة المعامل الاختياري flag والثوابت ARRAY_FILTER_USE_KEY و ARRAY_FILTER_USE_BOTH |
أمثلة
المثال 1: استخدام بسيط للدالة array_filter()
<?php
function odd($var)
{
// تُعيد إذا كانت القيمة العددية للمتغير عددًا فرديًا
return($var & 1);
}
function even($var)
{
// تُعيد إذا كانت القيمة العددية للمتغير عددًا زوجيًا
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 "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "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
)
المثال 2: استخدام الدالة array_filter() بدون استخدام دالة callback:
<?php
$entry = array(
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => ''
);
print_r(array_filter($entry));
?>
نتيجة المثال السابق:
Array
(
[0] => foo
[2] => -1
)
المثال 3: استخدام الدالة array_filter() مع المعامل flag:
<?php
$arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
var_dump(array_filter($arr, function($k) {
return $k == 'b';
}, ARRAY_FILTER_USE_KEY));
var_dump(array_filter($arr, function($v, $k) {
return $k == 'b' || $v == 4;
}, ARRAY_FILTER_USE_BOTH));
?>
نتيجة المثال السابق:
array(1) {
["b"]=>
int(2)
}
array(2) {
["b"]=>
int(2)
["d"]=>
int(4)
}
ملاحظات
إذا غيرت الدالة callback في قيم المصفوفة، بإضافة العناصر أو حذفها على سبيل المثال، فإن سلوك هذه الدالة سيكون غير محددٍ.
انظر أيضًا
- الدالة array_map(): تنفِّذ الدالة التي يحددها المستخدم على كل عنصر من عناصر المصفوفة.
- الدالة array_reduce(): تختزل المصفوفة إلى قيمة واحدة باستخدام دالة يحددها المستخدم.
- الدالة array_walk(): تُطبِّق دالةً على كل عنصر من المصفوفة.