使用回调来处理数组
1,array_filter($arr,function($value){})将每个值传入回调,最终结果仅包括返回true 的元素,返回数组
2. array_walk($arr, function($value,$key[,$p]){},$p):将每个键值传入回调,返回布尔值
3. array_map(function(),$arr1[,arr2...]):对1个或多个数组回调处理,返回索引数组记录执行结果
array_filter();本意就是数组中那些元素留下哪些元素删除;也可以修改数组中的某个值因为是直接修改原数组的内容所以才 有传参
<?php $array = ['id'=>1020, 'name'=>'Peter Zhu', 'job'=>'lecture']; $res=array_filter($array,function($values){ if($values=='Peter Zhu'){ return false; } return true; }); echo '<hr><pre>';print_r($res); $res1=array_filter($array,function(&$value){//备注;修改不了值 if($value=='Peter Zhu'){ $value='猪哥'; return true; } return true; }); echo '<hr><pre>'; print_r($res1); $arr1=['name'=>'ZhuGe','age'=>'28','sex'=>'woman','job'=>'teacher','salary'=>2000]; //array_walk()本意是在数组中漫步,走一遍,所以可以对每个键值对做一些个性化的处理 //遍历数组并加上指定的后缀 echo '<hr><pre>'; $re=array_walk($arr1,function($value,$key,$connect){ echo $value.$connect.$key.'<br>'; },'***'); //array_walk()返回是布尔值,一定要注意,将输出结果写到回调中 //所以,array_walk()也可以完成array_filter()的过滤功能 //例如,过滤掉数组中键名为salary的数据,将结果中的键值对用=>进行连接 echo '<hr>'; $ree=array_walk($arr1,function($value,$key,$connect){ if($key!='salary'){ echo $key.$connect.$value.'<br>'; }},'=>'); /** * array_map(function($val,$val,..){},$arr1,$arr2...) * 1.本意是数组映射 * 2. 回调的参数的数量与要处理的数组数量一致 * 3. 要处理的数组,其元素数量要相同,否则短的数组会被填充空值 * *4. 如果回调为null,则将多个数组组成一个多维数组 *5. 处理的是值,与键名无关 *6. 返回的是处理过的索引数组 */$age=[12,24,56,13,27,17,59]; //单数组:创建年龄数组,对每个值进行判断是否成年? $a=array_map(function($value){ if($value<18){ return '<span style="color:red">未成年</span>'; } return '<span style="color:green">成年了</span>'; },$age); echo '<hr><pre>';print_r($age); echo '<hr><pre>';print_r($a); //双数组:创建二个数组,一个是当做键名,一个当做值,并过滤掉键名为sex,age,salary的敏感数据 $key = ['id','name','sex','age','address','salary','job']; $value = [1020,'Peter Zhu','male',99,'合肥',5000,'讲师']; $res2=array_map(function($key,$value){ if(!in_array($key,['sex','age','salary'])){ return $value; }},$key,$value); echo '<hr><pre>'; print_r(array_values(array_filter($res2))); $name=['id','name','email']; $value=[4,'杨过','YangG@qq.com']; echo '<hr><pre>'; $res3=array_map(null,$name,$value); print_r($res3); //输出的是一个二维数组 echo '<hr><pre>'; foreach($res3 as $value){ list($key,$val)=$value; echo $key,'是',$val,'<br>';} ?>