<?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>';
}图:

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号