문제

배열에 포함 된 문자열 변수를 다듬기 위해이 명령문을 사용하여 제안하는 다른 게시물을 보았습니다.

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

그러나 성공하지 않으면 함수 리턴 후에 문자열 변수가 트림되지 않습니다.

왜 그리고 어떻게 이것을 할 수 있습니까?

도움이 되었습니까?

해결책

참조로 가변 수의 매개 변수를 전달할 수 없습니다. 해결 방법으로 같은 것을 시도하십시오

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

더 나은 방법은 스 니펫을 다시 작성하여 많은 변수를 사용할 필요가 없도록합니다. 어쨌든 나쁜 생각입니다.

다른 팁

이것은 또한 효과가 있지만, 당신이 매우 직관적이지 않은 것처럼 좌절감을 일으킬 수있는 사람이 될 것입니다.

// pass variables by string name
extract(array_map('trim', compact('a', 'b', 'c')));

나는 당신이 참조로 변수 길이의 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));

PHP 매뉴얼 페이지에 대한 의견은 하나의 가능한 대체 솔루션을 제안하지만, 이것이 func_get_args를 사용하여 가능하다고 확신하지는 않습니다. http://uk3.php.net/manual/en/function.func-get-args.php#90095

그러나 user187291의 해결 방법은 훨씬 간단 해 보입니다.

변수를 참조하여 통과하려고 시도 했습니까?

trimAll(&$a,&$b,&$c)

이것은 작동하지만 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";
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top