Domanda

Ho visto un altro post che suggerisce di usare questa istruzione per tagliare le variabili stringa contenute nell'array:

Ho visto un altro post che suggerisce di usare questa istruzione per tagliare le variabili stringa contenute nell'array:

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

Tuttavia, se in primo luogo, le stringhe non sono contenute in un array, vorrei avere una funzione di taglio che può essere utilizzata in questo modo:

function trimAll() {

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

Ho provato a scrivere una funzione come questa:

<*>

Ma senza successo, le variabili stringa non vengono tagliate dopo il ritorno della funzione.

Perché e come si può fare ??

POST=array_map('trim',

Ho visto un altro post che suggerisce di usare questa istruzione per tagliare le variabili stringa contenute nell'array:

<*>

Tuttavia, se in primo luogo, le stringhe non sono contenute in un array, vorrei avere una funzione di taglio che può essere utilizzata in questo modo:

<*>

Ho provato a scrivere una funzione come questa:

<*>

Ma senza successo, le variabili stringa non vengono tagliate dopo il ritorno della funzione.

Perché e come si può fare ??

POST);

Tuttavia, se in primo luogo, le stringhe non sono contenute in un array, vorrei avere una funzione di taglio che può essere utilizzata in questo modo:

<*>

Ho provato a scrivere una funzione come questa:

<*>

Ma senza successo, le variabili stringa non vengono tagliate dopo il ritorno della funzione.

Perché e come si può fare ??

È stato utile?

Soluzione

non è possibile passare un numero variabile di parametri per riferimento. Per ovviare al problema, prova qualcosa come

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

ancora meglio, riscrivi lo snippet in modo che non richieda l'uso di un mucchio di variabili, il che è comunque una cattiva idea

Altri suggerimenti

Anche questo funziona, ma probabilmente renderà frustrato chiunque con cui potresti lavorare perché non molto intuitivo:

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

Non credo che tu possa passare un elenco di argomenti di lunghezza variabile per riferimento.

Potresti passare una serie di riferimenti.

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

... e opportunamente modificare la chiamata per creare una serie di riferimenti.

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

Non sono convinto che ciò sia possibile usando func_get_args, anche se un commento sulla sua pagina di manuale PHP suggerisce una possibile soluzione alternativa: http://uk3.php.net/manual/en/function.func-get-args.php#90095

Tuttavia, la soluzione alternativa di user187291 sembra molto più semplice.

Hai provato a passare le variabili per riferimento.

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

Funziona, ma usa il pass-by-reference del tempo di chiamata, che è deprecato in 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";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top