PHP5에서 참조별로 문자열 변수를 트리밍합니다
-
08-07-2019 - |
문제
배열에 포함 된 문자열 변수를 다듬기 위해이 명령문을 사용하여 제안하는 다른 게시물을 보았습니다.
$_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";