场景
永远不能相信用户的输入,那么对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' => '#39;,
'gender' => 'man'
];
print_r($params);
array_walk($params, function(&$value, $key){
if (in_array($key, ['avatar', 'face_url'])) {
$value = '#39;. ltrim($value, '#39;);
}
});
print_r($params);
/**
Array
(
[name] => 愤怒的鸟
[avatar] => www.laiyige.com
[face_url] =>
[gender] => man
)
Array
(
[name] => 愤怒的鸟
[avatar] =>
[face_url] =>
[gender] => man
)
**/
Hi there! This post could not be written much better! Going
through this article reminds me of my previous roommate!
He constantly kept talking about this. I’ll send this post to him.
Fairly certain he will have a good read. Thanks for sharing!