array_walk、array_map、array_filter 的用法

本文深入讲解了PHP中array_walk、array_map、array_filter等函数的使用方法,包括如何利用回调函数处理数组元素,以及如何过滤数组中的特定元素。

array_walk、array_map、array_filter  和 foreach 都有循环对数组元素进行处理的功能。

 

一、array_walk 用法

 

1、循环数组,回调处理(并不修改数组元素的值,而是跳出去做其他的事情[回调的定义])

如:

$arr = [
    ['name' => 'A', 'age' => 18],
    ['name' => 'B', 'age' => 11],
];
 array_walk($arr, function ($value) {
     //做其他的逻辑处理,不对数组元素进行处理
     echo  "name:" . $value['name'] . ', age:' . $value['age'] . "\n";
 });

 

输出的结果:

name:A, age:18
name:B, age:11

 

2、循环数组,对数据的元素进行处理

如:

$arr = [
    ['name' => 'A', 'age' => 18],
    ['name' => 'B', 'age' => 11],
];

//使用引用
 array_walk($arr, function (&$value) {
    //修改元素的 age  值
    $value['age'] = $value['age'] - 1;
    
 });

print_r($arr);

输出结果:

Array
(
   [0] => Array
       (
           [name] => A
           [age] => 17
       )
   [1] => Array
       (
           [name] => B
           [age] => 10
       )
)

 

二、array_map 用法

array_map 的作用其实和array_walk 的引用差不多,就是循环数组,对数组元素的值进行处理;

 

三、array_filter 用回调函数过滤数组中的单元

通过 array_filter 处理过的数组,数字索引的数组会是不连续的,要通过 array_values()处理整理数组

 

 

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 "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));

 

### `array_filter` 使用说明及示例 `array_filter` 是 PHP 中用于对数组元素进行过滤的函数,它可以根据指定的回调函数对数组中的每个元素进行判断,仅保留符合条件的元素,最终返回一个新的过滤后的数组。 该函数的基本语法为: ```php array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) ``` 其中: - `$array`:需要被过滤的原始数组。 - `$callback`:用于判断数组元素是否应保留的回调函数。若省略该参数,则默认保留所有值为 `true` 的元素(即布尔值为真)。 - `$flag`:可选参数,用于控制回调函数接收的参数类型,如 `ARRAY_FILTER_USE_KEY` 表示将数组键作为参数传入回调函数等。 #### 示例一:使用回调函数过滤奇数和偶数 以下示例展示了如何使用 `array_filter` 过滤出数组中的奇数和偶数: ```php <?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 ) ``` 此示例中,`odd` 函数用于判断是否为奇数,`even` 函数用于判断是否为偶数,并分别应用于不同的数组进行过滤[^1]。 #### 示例二:不使用回调函数过滤空值 当不提供回调函数时,`array_filter` 会自动移除数组中所有值为 `false` 的元素,例如空字符串、`null`、`false`、`0` 等: ```php <?php $entry = array(0 => 'foo', 1 => false, 2 => -1, 3 => null, 4 => ''); print_r(array_filter($entry)); // 过滤掉空值 ?> ``` 输出结果为: ``` Array ( [0] => foo [2] => -1 ) ``` 此示例展示了如何在不指定回调函数的情况下,使用 `array_filter` 来移除数组中的“空”元素[^1]。 #### 示例三:结合 `array_walk` 或 `array_map` 使用 在处理复杂结构的数组时,`array_filter` 可与其他数组函数(如 `array_walk` 或 `array_map`)结合使用,实现更灵活的数据处理逻辑。例如: ```php <?php $data = array( array('name' => 'A', 'age' => 17), array('name' => 'B', 'age' => 10), ); $filtered = array_filter($data, function($item) { return $item['age'] > 15; }); print_r($filtered); ?> ``` 输出结果为: ``` Array ( [0] => Array ( [name] => A [age] => 17 ) ) ``` 该示例中,`array_filter` 被用于筛选出 `age` 大于 15 的记录,展示了其在结构化数据处理中的灵活性[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值