0

我看到另一篇文章建议使用此语句来修剪数组中包含的字符串变量:

$_POST=array_map('trim', $_POST);

但是,如果首先,字符串不包含在数组中,我希望有一个可以像这样使用的修剪函数:

$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
}

但是如果没有成功,字符串变量在函数返回后不会被修剪。

为什么以及如何做到这一点?

4

6 回答 6

4

您不能通过引用传递可变数量的参数。作为一种解决方法,请尝试类似

list($a, $b, $c) = array_map('trim', array($a, $b, $c));

更好的是,重写代码段,使其不需要使用一堆变量,这无论如何都是个坏主意

于 2009-10-29T01:15:39.937 回答
2

这也有效,但可能会使您可能碰巧与之共事的任何人感到沮丧,因为它非常不直观:

// pass variables by string name
extract(array_map('trim', compact('a', 'b', 'c')));
于 2009-10-29T01:41:19.870 回答
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));
于 2009-10-29T01:12:17.540 回答
1

我不相信使用 func_get_args 可以做到这一点,尽管对其 PHP 手册页的评论提出了一种可能的替代解决方案:http ://uk3.php.net/manual/en/function.func-get-args.php# 90095

但是 user187291 的解决方法看起来要简单得多。

于 2009-10-29T01:25:44.950 回答
0

您是否尝试过通过引用传递变量。

trimAll(&$a,&$b,&$c)
于 2009-10-29T00:55:46.903 回答
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";
于 2011-10-07T09:28:44.143 回答