<?php /* * 使用回调来处理数组 * 1.array_filter($arr,function($value){}):将每个值传入回调,最终结果仅包括返回true的元素,返回数组 * 2.array_walk($arr,function($value,$key,[$p]{},$p):将每个键值传入回调,返回布尔值 * 3.array_map(function ($v1,$v2){},$arr1,$arr2...):对1个或多个数组回调处理,返回索引数组记录执行结果 */ header('content-type:text/html;charset=utf-8'); $array=['id'=>520,'name'=>'peng','job'=>'inter']; //1.把数组中'name'=>'peng'的数据删除 $res=array_filter($array,function ($value){ if($value=='peng'){ return false; } return true; }); echo '<pre>'; print_r($res); echo '<hr>'; //1.2.把原来数组中的参数改变,需要用引用传参的方式 在参数$value中前面加个&符(&$value)把'job'=>'teacher' $res=array_filter($array,function(&$value){ if($value=='inter'){ $value='teacher'; } return true; }); print_r($res); //2、array_walk($arr,function($value,$key,[$p]{},$p)函数:将每个键值对出入到回调函数中处理,返回处理结果为true的元素 $suffix='www.php.cn'; array_walk($array,function ($value,$key,$suffix){ echo $key.'=>'.$value.'('.$suffix.')'.'<br>'; },$suffix); echo '<br>'; //2.1 array_walk()过滤数组中键名等于id的数据,将结果中的健值对用***进行连接 $connect='***'; array_walk($array,function ($value,$key,$connect){ if($key!=='id'){ echo $key.$connect.$value.'<br>'; } },$connect); //3.array_map(function ($v1,$v2){},$arr1,$arr2...):对1个或多个数组回调处理,返回索引数组记录执行结果 //要求判断18岁以下为未成年 $age=[13,14,12,40]; $res1=array_map(function ($value){ if($value< '18'){ return '<span style="color: red">未成年</span>'; } return '<span style="color: #c1e2b3">成年</span>'; },$age); print_r($res1); echo '<hr>'; //3.2 双数组 $key=['id','name','sex','age','address','salary','job']; $value=[1020,'Peter Zhu','male',99,'合肥',9988,'讲师']; //过滤掉敏感数组,sex,age,salary//3.2 双数组 $res2=array_map(function ($key,$value){ if(!in_array($key,['sex','age','salary'])){ return $value; } },$key,$value); print_r(array_values(array_filter($res2)));//过滤空字符串且并重排了序 //3.3 回调函数为null,返回一个多维数组 $name = ['id','name','lesson']; $value = [666,'JS','PHP']; $res3=array_map(null,$name,$value); echo '<hr>'; foreach ($res3 as $value){ list($key,$val)=$value; echo $key,'是',$val.'<br>'; }
图: