我看到另一篇文章建议使用此语句来修剪数组中包含的字符串变量:
$_POST=array_map('trim', $_POST);
但是,如果首先,字符串不包含在数组中,我希望有一个可以像这样使用的trim函数:
$a=' aaa ';
$b=' bbb ';
$c=' ccc ';
trimAll($a,$b,$c); //arbitrary number of string variables can be passed
我试着编写一个这样的函数:
function trimAll() {
$args = &func_get_args();
foreach($args as &$arg) {
if(isset($arg) && is_string($arg))
$arg=&trim($arg);
}
//no return value is required
}
但是没有成功,函数返回后字符串变量不会被修剪。
为什么以及如何做到这一点?
答案 0 :(得分:4)
您不能通过引用传递可变数量的参数。作为解决方法,请尝试类似
的内容list($a, $b, $c) = array_map('trim', array($a, $b, $c));
更好的是,重写代码片段以便它不需要使用一堆变量,这无论如何都是个坏主意
答案 1 :(得分:2)
这也有效,但很可能会让任何可能碰巧沮丧的人因为非常不直观而感到沮丧:
// pass variables by string name
extract(array_map('trim', compact('a', 'b', 'c')));
答案 2 :(得分:1)
我认为你不能通过引用传递一个可变长度的args列表。
您可以传入一系列参考文献。
function trimAll($array) {
foreach($array as $k => $v) {
if(isset($array[$k]) && is_string($array[$k]))
$array[$k]=&trim($array[$k]);
}
}
...并适当修改您的调用以创建引用数组。
$a=' aaa ';
$b=' bbb ';
$c=' ccc ';
trimAll(array(&$a,&$b,&$c));
答案 3 :(得分:1)
我不相信使用func_get_args这是可能的,尽管对它的PHP手册页的评论提出了一种可能的替代解决方案:http://uk3.php.net/manual/en/function.func-get-args.php#90095
然而,user187291的解决方法看起来更简单。
答案 4 :(得分:0)
您是否尝试通过参考传递变量。
trimAll(&$a,&$b,&$c)
答案 5 :(得分:0)
这样可行,但使用调用时传递引用,这在PHP 5.3中已弃用:
function trimAll() {
$backtrace = debug_backtrace();
foreach($backtrace[0]['args'] as &$arg)
if(isset($arg) && is_string($arg))
$arg=trim($arg);
}
$a=' aaa ';
$b=' bbb ';
$c=' ccc ';
trimAll(&$a,&$b,&$c);
echo "$a\n";
echo "$b\n";
echo "$c\n";