https://www.yuque.com/docs/share/a945be3b-a139-4738-87d2-19fc53a64890
https://www.php.net/manual/zh/function.array-map.php
定义和用法
array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新的值的数组。
提示:您可以向函数输入一个或者多个数组。
语法
array_map(myfunction,array1,array2,array3...)
• myfunction
• 必需。
• 用户自定义函数的名称,或者是 null。
• array1
• 必需。
• 规定数组。
• array2
• 可选。
• 规定数组。
• array3,...
• 可选。
• 规定数组。
• 返回值
• 返回包含用户自定义函数作用后的 array1 的值的数组。
实例
将函数作用到数组中的每个值上,每个值都乘以本身,并返回带有新的值的数组:
<?php
function myfunction($v)
{
return($v*$v);
}
$a=array(1,2,3,4,5);
print_r(array_map("myfunction",$a));
?>
使用一个用户自定义函数来改变数组的值:
<?php
function myfunction($v)
{
if ($v==="Dog")
{
return "Fido";
}
return $v;
}
$a=array("Horse","Dog","Cat");
print_r(array_map("myfunction",$a));
?>
使用两个数组:
<?php
function myfunction($v1,$v2)
{
if ($v1===$v2)
{
return "same";
}
return "different";
}
$a1=array("Horse","Dog","Cat");
$a2=array("Cow","Dog","Rat");
print_r(array_map("myfunction",$a1,$a2));
?>
将数组中值的所有字母改为大写:
<?php
function myfunction($v)
{
$v=strtoupper($v);
return $v;
}
$a=array("Animal" => "horse", "Type" => "mammal");
print_r(array_map("myfunction",$a));
?>
将函数名赋值为 null 时:
<?php
$a1=array("Dog","Cat");
$a2=array("Puppy","Kitten");
print_r(array_map(null,$a1,$a2));
?>
<?php
$project = [
"ys001"=>"kz",
"jsb001"=>"kz_j",
];
$list = [
["product"=>"ys001","value"=>1],
["product"=>"jsb001","value"=>2],
];
// 将数值数据格式化
$list = array_map(function ($item)use($project) {
$item['product'] = $project[$item['product']];
return $item;
}, $list);
print_r($list);
?>
将对象转为数组方法:延伸array_map函数在PHP类中调用内部方法
public static function objectToArray($d) {
if (is_object($d)) {
$d = get_object_vars($d);
}
if (is_array($d)) {
//数组中的每个值都通过当前函数处理(如果是多维数组相当于递归),这里都是原样返回(return $d) return array_map(array(__CLASS__, __FUNCTION__), $d);
} else {
return $d;
}
}
array_map(array(__CLASS__, __FUNCTION__), $d)解释:
我们可以在PHP手册中找到一段用户添加的说明:If you need to call a static method from array_map, this will NOT work:如果你想在array_map函数中回调一个静态方法,那么下面的做法是错误的)
<?php $a = array(1, 2, 3, 4, 5); $b = array_map("myclass::myMethoed", $a); print_r($b); ?>
Instead, you need to do this:
<?php $a = array(1, 2, 3, 4, 5); $b = array_map(array("myclass","myMethoed"), $a); print_r($b); ?>
这里有几点可以参考的:
1,在PHP类中通过array_map函数回调内部方法时,类名称可以使用__CLASS__常量。我们强烈推荐使用此常量,因为不论你类如何修改,这能保证最终结果都是正确的。
2,如果回调的方法是非静态类型,亦可通过$this伪变量指定。
3,在PHP类中的array_map函数总是不能识别self伪变量。