Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #4667

Frage zu array_walk_recursive

From Daniel Walz <daniel.walz@gmx.de>
Newsgroups de.comp.lang.php
Subject Frage zu array_walk_recursive
Date 2021-02-01 20:46 +0100
Message-ID <i7r442Foke1U1@mid.individual.net> (permalink)

Show all headers | View raw


Hallo,

für eine simple Template-Klasse bzw. Singleton brauche ich eine Funktion
zum escapen der Platzhalter-Variablen. Diese werden in einem Array
übergeben, das auch geschachtelt sein kann. Ich habe mir dafür diese
rekursive Funktion geschrieben:

public static function escape($var)
{
 $esc_var = [];
 if (is_array($var))
 {
   foreach ($var as $platzhalter => $ersetzung)
   {
   if (is_array($ersetzung))
     {
     $esc_var[$platzhalter] = self::escape($ersetzung);
     }
   else
   {
   $esc_var[$platzhalter] = htmlspecialchars($ersetzung);
   }
  }
  return $esc_var;
  }
  else
  {
  return htmlspecialchars($var);
  }
}


Danach fiel mir auf, dass es ja in PHP bereits eine Funktion
array_walk_recursive gibt, so dass das hier das gleiche zu machen scheint:

public static function escape($var)
{
  if (is_array($var))
  {
  array_walk_recursive($var, function (&$value, $key)
    {
    $value = htmlspecialchars($value);
    });
  return $var;
  }
  else
  {
  return htmlspecialchars($var);
  }
}

Meine Frage:
Machen die beiden Funktionen tatsächlich das gleiche (bei all meinen
Tests bisher ja), oder habe ich irgendwas übersehen?

Auf php.net steht als Warnung groß "* THIS FUNCTION ONLY VISITS LEAF
NODES *, aber das entspricht ja hier genau dme gewünschten Verhalten,
wenn ich es richtig verstehe.


Gruß
Daniel

Back to de.comp.lang.php | Previous | Next | Find similar


Thread

Frage zu array_walk_recursive Daniel Walz <daniel.walz@gmx.de> - 2021-02-01 20:46 +0100

csiph-web