每天一个常用PHP函数-array_walk、array_map

场景
永远不能相信用户的输入,那么对api中的参数进行统一过滤,就需要去遍历数组?
语法
array_map ( callable $callback , array $array1 [, array $... ] ) : array
数组中的元素作为参数,执行callback,返回值是新数组
$callback($element)
array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] ) : bool
数组中的元素作为参数,执行callback, 这里是引用传值,会直接修改原数组
$callback(&$value, $key), 数组的元素值与key
使用
$params = [
'name' => '愤怒的鸟',
'password' => 'abcd99>',
];
print_r($params);
print_r(array_map(function($value){
return trim($value, '>');
}, $params));
/**
Array
(
[name] => 愤怒的鸟
[password] => abcd99>
)
Array
(
[name] => 愤怒的鸟
[password] => abcd99
)
**/
再比如api参数格式不统一如何处理?下划线转驼峰
$params = [
'name' => '愤怒的鸟',
'totalAmount' => 100,
'remain_amount' => 8
];
$paramsToCamelbak = function($key){
$keyTmp = ucwords(str_replace(['_'], ' ', $key));
return lcfirst(str_replace(' ', '', $keyTmp));
};
$newKeys = array_map($paramsToCamelbak, array_keys($params));
$values = array_values($params);
// 合并数组
print_r(array_combine($newKeys, $values));
/**
Array
(
[name] => 愤怒的鸟
[totalAmount] => 100
[remainAmount] => 8
)
**/
再想如果参数中的url有的带有http协议有的没有,那在入库前可以做一次统一处理
$params = [
'name' => '愤怒的鸟',
'avatar' => 'www.laiyige.com',
'face_url' => 'http://www.sss.com',
'gender' => 'man'
];
print_r($params);
array_walk($params, function(&$value, $key){
if (in_array($key, ['avatar', 'face_url'])) {
$value = 'http://'. ltrim($value, 'http://');
}
});
print_r($params);
/**
Array
(
[name] => 愤怒的鸟
[avatar] => www.laiyige.com
[face_url] => http://www.sss.com
[gender] => man
)
Array
(
[name] => 愤怒的鸟
[avatar] => http://www.laiyige.com
[face_url] => http://www.sss.com
[gender] => man
)
**/
相关推荐
-
PHP8种变量类型的详细讲解2025-02-22 00:32:24
-
php+apache 和 php+nginx的区别2025-02-22 00:21:27
-
PHP:与workerman结合实现定时任务2025-02-22 00:15:57
-
Nginx的Rewrite规则与实例2025-02-22 00:15:39
-
MySql中身份证字段的简单脱敏介绍2025-02-22 00:15:36