博客列表 >回调函数来处理数组:array_,map(),array_filter(),array_walk()

回调函数来处理数组:array_,map(),array_filter(),array_walk()

小的博客
小的博客原创
2018年01月09日 12:48:251160浏览

使用回调来处理数组
     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>';}
?>


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议