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

func_get_args を使用してこれが可能であるとは確信していませんが、PHP のマニュアル ページに関するコメントでは、別の解決策が 1 つ提案されています。 90095

ただし、user187291 の回避策ははるかに簡単に見えます。

于 2009-10-29T01:25:44.950 に答える
1

引数の可変長リストを参照で渡すことはできないと思います。

参照の配列を渡すことができます。

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 に答える
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 に答える