Pregunta

Vi otra publicación sugiriendo usar esta declaración para recortar las variables de cadena contenidas en la matriz:

Vi otra publicación sugiriendo usar esta declaración para recortar las variables de cadena contenidas en la matriz:

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

Sin embargo, si en primer lugar, las cadenas no están contenidas en una matriz, me gustaría tener una función de recorte que se pueda usar así:

function trimAll() {

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

Traté de escribir una función como esta:

<*>

Pero sin éxito, las variables de cadena no se recortan después del retorno de la función.

¿Por qué y cómo se puede hacer esto?

POST=array_map('trim',

Vi otra publicación sugiriendo usar esta declaración para recortar las variables de cadena contenidas en la matriz:

<*>

Sin embargo, si en primer lugar, las cadenas no están contenidas en una matriz, me gustaría tener una función de recorte que se pueda usar así:

<*>

Traté de escribir una función como esta:

<*>

Pero sin éxito, las variables de cadena no se recortan después del retorno de la función.

¿Por qué y cómo se puede hacer esto?

POST);

Sin embargo, si en primer lugar, las cadenas no están contenidas en una matriz, me gustaría tener una función de recorte que se pueda usar así:

<*>

Traté de escribir una función como esta:

<*>

Pero sin éxito, las variables de cadena no se recortan después del retorno de la función.

¿Por qué y cómo se puede hacer esto?

¿Fue útil?

Solución

no puede pasar un número variable de parámetros por referencia. Como solución alternativa, intente algo como

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

mejor aún, reescribe el fragmento para que no sea necesario usar un montón de variables, lo cual es una mala idea de todos modos

Otros consejos

Esto también funciona, pero es probable que haga frustrar a cualquiera con quien trabaje, ya que es muy poco intuitivo:

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

No creo que pueda pasar una lista de args de longitud variable por referencia.

Podría pasar una serie de referencias.

function trimAll($array) {
    foreach($array as $k => $v) {
        if(isset($array[$k]) && is_string($array[$k]))
            $array[$k]=&trim($array[$k]);
    }
}

... y modifique adecuadamente su llamada para crear una matriz de referencias.

$a='  aaa ';
$b='  bbb ';
$c='  ccc ';
trimAll(array(&$a,&$b,&$c));

No estoy convencido de que esto sea posible usando func_get_args, aunque un comentario en la página del manual de PHP sugiere una posible solución alternativa: http://uk3.php.net/manual/en/function.func-get-args.php#90095

Sin embargo, la solución del usuario187291 parece mucho más simple.

¿Has intentado pasar las variables por referencia?

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

Esto funciona, pero utiliza la referencia de tiempo de llamada, que está en desuso en 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";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top