PHP array_map() 函数

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伪变量。

    A+
发布日期:2019年12月18日  所属分类:未分类

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: