Question

J'ai vu un autre article suggérant d'utiliser cette instruction pour supprimer les variables de chaîne contenues dans le tableau:

J'ai vu un autre article suggérant d'utiliser cette instruction pour supprimer les variables de chaîne contenues dans le tableau:

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

Cependant, si en premier lieu les chaînes ne sont pas contenues dans un tableau, j'aimerais avoir une fonction de rognage qui puisse être utilisée comme ceci:

function trimAll() {

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

J'ai essayé d'écrire une fonction comme celle-ci:

<*>

Mais sans succès, les variables de chaîne ne sont pas tronquées après le retour de la fonction.

Pourquoi et comment cela peut-il être fait ??

POST=array_map('trim',

J'ai vu un autre article suggérant d'utiliser cette instruction pour supprimer les variables de chaîne contenues dans le tableau:

<*>

Cependant, si en premier lieu les chaînes ne sont pas contenues dans un tableau, j'aimerais avoir une fonction de rognage qui puisse être utilisée comme ceci:

<*>

J'ai essayé d'écrire une fonction comme celle-ci:

<*>

Mais sans succès, les variables de chaîne ne sont pas tronquées après le retour de la fonction.

Pourquoi et comment cela peut-il être fait ??

POST);

Cependant, si en premier lieu les chaînes ne sont pas contenues dans un tableau, j'aimerais avoir une fonction de rognage qui puisse être utilisée comme ceci:

<*>

J'ai essayé d'écrire une fonction comme celle-ci:

<*>

Mais sans succès, les variables de chaîne ne sont pas tronquées après le retour de la fonction.

Pourquoi et comment cela peut-il être fait ??

Était-ce utile?

La solution

vous ne pouvez pas transmettre un nombre variable de paramètres par référence. Pour résoudre ce problème, essayez quelque chose comme

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

Mieux encore, réécrivez le code afin qu'il ne nécessite pas l'utilisation d'un groupe de variables, ce qui est une mauvaise idée quand même

Autres conseils

Cela fonctionne aussi, mais rendra probablement frustré toute personne avec laquelle vous travaillerez, ce qui est très peu intuitif:

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

Je ne pense pas que vous puissiez transmettre une liste d'arguments de longueur variable par référence.

Vous pouvez transmettre un tableau de références.

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

... et modifiez votre appel de manière appropriée pour créer un tableau de références.

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

Je ne suis pas convaincu que cela soit possible avec func_get_args, bien qu'un commentaire sur sa page de manuel PHP suggère une solution alternative: http://uk3.php.net/manual/en/function.func-get-args.php#90095

Cependant, la solution de contournement de l'utilisateur187291 semble beaucoup plus simple.

Avez-vous essayé de passer les variables par référence.

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

Cela fonctionne, mais utilise le temps de référence par appel, obsolète 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";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top