Frage

ich sah einen anderen Beitrag darauf hindeutet, diese Aussage mit String-Variablen in der Matrix enthalten sind, trimmen:

$_POST=array_map('trim', $_POST);

Wenn jedoch in erster Linie werden die Saiten nicht in einem Array enthalten ist, würde Ich mag eine Trimm-Funktion haben, die wie folgt verwendet werden:

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

Ich habe versucht, eine Funktion wie folgt zu schreiben:

function trimAll() {

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

Aber ohne Erfolg, nicht die String-Variablen nicht nach Funktion Rückkehr getrimmt erhalten.

Warum und wie kann dies geschehen ??

War es hilfreich?

Lösung

Sie können keine variable Anzahl von Parametern als Verweis übergeben. Als Abhilfe kann versuchen, so etwas wie

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

noch besser, schreiben Sie den Code-Schnipsel, so dass es nicht eine Reihe von Variablen zu verwenden, erfordert, die sowieso eine schlechte Idee ist

Andere Tipps

Das funktioniert auch, wird aber wahrscheinlich macht jemand, den Sie mit frustriert arbeiten, wie seine sehr unintuitive passieren könnten:

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

Ich glaube nicht, dass Sie eine Liste mit variabler Länge von args als Verweis übergeben können.

Sie in einer Reihe von Referenzen passieren könnten.

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

... und in geeigneter Weise modifiziert Ihren Anruf eine Reihe von Referenzen zu erstellen.

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

Ich bin nicht davon überzeugt, dass dies möglich ist func_get_args verwenden, obwohl ein Kommentar auf es ist PHP-Handbuch Seite schlägt eine mögliche alternative Lösung: http://uk3.php.net/manual/en/function.func-get-args.php#90095

Allerdings user187291 die Abhilfe sieht viel einfacher.

Haben Sie versucht, in den Variablen durch Referenz übergeben.

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

Dies funktioniert, aber nutzt Call-Zeit-Pass-by-Referenz, die in PHP ist veraltet 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";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top