PHP函数使用宝典:array_filter()函数的神奇用途。
array_filter() 函数是 PHP 中非常常用的数组处理函数,它的作用是过滤数组中的不需要的元素,返回一个只包含满足回调函数条件的元素的新数组。
array_filter() 函数的用法非常简单,其中 个参数是要过滤处理的数组,第二个参数是过滤回调函数,如果回调函数返回 true 则该元素会被保留,否则会被过滤掉。
接下来,我们将会介绍 array_filter() 函数的神奇用途:
1. 数组去重
使用 array_filter() 函数可以非常轻松地实现数组去重的功能。对于一个含有重复元素的数组,我们可以通过以下方式去重:
// 定义一个数组
$arr = array(1, 1, 2, 3, 4, 4, 5);
// 使用 array_filter() 去重
$uniqueArr = array_filter($arr, function ($val, $key) use (&$arr) {
return array_search($val, $arr) === $key;
}, ARRAY_FILTER_USE_BOTH);
上述代码使用了 array_search() 函数来判断当前值是否是 次出现,用变量 $key 作为索引值,如果当前值是 次出现,则保留该值,否则过滤掉。
2. 数组平铺
数组平铺顾名思义就是把数组中的多层嵌套展开,通过 array_filter() 函数可以很方便地实现,例如下面的多层嵌套数组:
$arr = array(
array(1, 2, 3),
array(4, 5, 6),
array(
array(7, 8),
9,
array(10, 11, 12)
),
13
);
我们可以通过以下方式来将这个多层嵌套数组展开成一个一维数组:
$flattenArr = array_filter(iterator_to_array(new RecursiveIteratorIterator(new RecursiveArrayIterator($arr))), 'strlen');
上述代码中,我们使用了 PHP 中的递归迭代器 RecursiveIterator,将嵌套数组展开成迭代器,再用 iterator_to_array() 函数将迭代器转换成数组,最后使用 array_filter() 函数过滤掉空字符串元素即可。
3. 数组分组
使用 array_filter() 函数可以非常方便地给数组元素分组,例如下面的数组:
$students = array(
array('name' => 'Alice', 'gender' => 'female', 'age' => 20),
array('name' => 'Bob', 'gender' => 'male', 'age' => 22),
array('name' => 'Cathy', 'gender' => 'female', 'age' => 21),
array('name' => 'David', 'gender' => 'male', 'age' => 23)
);
我们可以通过以下方式将这个数组按照性别分成两组:
$maleStudents = array_filter($students, function ($val) {
return $val['gender'] === 'male';
});
$femaleStudents = array_filter($students, function ($val) {
return $val['gender'] === 'female';
});
上述代码中,我们分别使用了两个不同的回调函数来过滤出性别为男和女的学生组,并分别将结果保存到 $maleStudents 和 $femaleStudents 数组中。
总结:
array_filter() 函数是 PHP 中非常常用的数组处理函数,它可以实现数组的去重、平铺、分组等神奇效果,具有非常重要的实用价值。
