denkfehler bei rekursiven aufruf?

ich glaub ich hab grad nen denkfehler.
ich hab folgende funktion zum filtern von arrays:

Code:
  function filter_array(&$arr) {
      foreach ($arr as $key => $value) {
          if (is_array($value)) {
              filter_array($value);
          } else {
              $arr[$key] = htmlspecialchars($value , ENT_QUOTES);
          }
      }
  }


wenn mein array jetzt folgendes ist:

Code:
$data = array("muh","bla<>");

bekomm ich auch die <> sauber mit > umgewandelt zurück.
wenn ich aber dagegen folgedes array habe:

Code:
$data = array(array(array("hallo","coool"),array("muh","bla<>")));

bekomm ich das array mit dem <> zurück und nicht mit > und <
wo ist mein denkfehler?
 
Naja, es klappt zwar in der xten Rekursionsstufe die Zuweisung des Wertes zum Arrayschlüssel, wenn du die Rekursion dann aber wieder zurückgehst, wird der Array nicht mehr dem aktuellen Schlüssel zugewiesen und die Umformung geht dann verloren.

Lässt sich doof beschreiben, aber vielleicht erklärt sich's, wenn der Code korrigiert ist:

PHP:
  function filter_array(&$arr) {
      foreach ($arr as $key => $value) {
          if (is_array($value)) {
              filter_array($value);
              $arr[$key] = $value; /* diese Zeile fehlt */
          } else {
              $arr[$key] = htmlspecialchars($value , ENT_QUOTES);
          }
      }
  }
 
Ich denke follgender Code sollte auch richtig sein.

PHP:
<?php function filter_array(&$arr) {
      foreach ($arr as $key => & $value) { /* das & ist hier entscheidend, damit der Wert als Referenz übergeben wird */
          if (is_array($value)) {
              filter_array($value);
          } else {
              $arr[$key] = htmlspecialchars($value , ENT_QUOTES);
          }
      }
  } ?>
 
Zurück
Oben