PHP5

2009-10-29 5 views
0

참고로 문자열 변수를 트리밍 나는 배열에 포함 된 문자열 변수를 트림이 문을 사용하여 제안 다른 게시물을 보았다PHP5

function trimAll() { 

    $args = &func_get_args(); 
    foreach($args as &$arg) { 
     if(isset($arg) && is_string($arg)) 
      $arg=&trim($arg); 
    } 
     //no return value is required 
} 
:

$a=' aaa '; 
$b=' bbb '; 
$c=' ccc '; 
trimAll($a,$b,$c); //arbitrary number of string variables can be passed 

나는이 같은 함수를 작성하려고 : I는 다음과 같이 사용할 수있는 트림 기능을 가지고 싶습니다

하지만 성공하지 못하면 함수가 반환 된 후에 문자열 변수가 잘리지 않습니다.

왜 어떻게 할 수 있습니까 ??

+0

당신이'trimAll을 (수행해야합니다 $ A, &$b);'[PHP? : 참조로 가변 길이 인수 목록]의 – alex

+0

가능한 중복? (http://stackoverflow.com/questions/1925253/php-variable-length-argument-list-by-reference) – newacct

답변

4

참조로 여러 매개 변수를 전달할 수 없습니다. 그것은 어쨌든

0

참조로 변수를 전달해 보았습니까?

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

전화 -time는 – ken

+0

@ken가 나는 그것의 감가 상각 알고있는 정보 – bobo

+0

주셔서 너무 감사합니다 (당신이 제안하는 무엇을) PHP 5에서 더 이상 사용되지 않습니다에 의해 참조 패스,하지만 그가하지 않는 한 원하는 것을 할 수있는 유일한 방법에 대해되지도 방법의 특성을 모두 (의 알 수없는 수)가 기록 된대로이 여전히'trimAll' 기능이 작동하지 않습니다 –

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)); 
+0

당신이 접두사를 추가하는 경우 trimAll 함수에 $ array 인수를 &와 함께 사용하면 정상적으로 사용할 수 있습니다. – alex

+2

트림 btw를 & 옆에 제거하십시오. – lemon

+0

오류가 발생하지 않습니다. 치명적인 오류가 발생합니다. 15 행의 참조로 변수 만 전달할 수 있습니다. http://codepad.org/FItzMVjn – bobo

1

내가 그 확신 아니에요 나쁜 생각 변수의 무리를 사용하도록 요구하지 않도록이 문제를 해결 스 니펫을 다시, 더 나은 아직

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

같은 시도 이것은 func_get_args를 사용하는 것이 가능합니다. PHP 매뉴얼 페이지에 대한 의견은 가능한 대안 솔루션을 제안하고 있습니다. http://uk3.php.net/manual/en/function.func-get-args.php#90095

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

+0

예.하지만 권장되지 않는 통화 시간 기준 전달이 필요합니다. – newacct

2

이 또한 작동하지만 가능성이 발생할 수있는 사람은 매우 직관적으로 좌절 작업을 할 것입니다 :

// pass variables by string name 
extract(array_map('trim', compact('a', 'b', 'c'))); 
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";