Taglio delle variabili stringa per riferimento in PHP5
-
08-07-2019 - |
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 ??
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";