Andreas Korthaus: Jeden existierenden Wert eines Arrays bearbeiten

Beitrag lesen

Hallo!

Ich möchte in einem mehrdimensionalen Array jeden existierenden Wert einzeln bearbeiten und mit geänderten Werten wieder abspeichern. Der Array soll auch "unvorhersehbare" Formen annehmen können. Damit meine ich, dass er in Länge und Dimensionalität völlig unterschiedlich ausfallen kann.

Wenn Du PHP5 verwenden kannst, empfielt sich hier die Verwendung von array_walk_recursive().

Wenn Dir noch kein PHP5 zur Verfügung steht wird es ein klein wenig komplizierter, da wirfst Du am besten mal einen Blick auf array_walk(), vor allem auch auf die User-Kommentare dort!

$array[$i] = processArray($array[$i]);

Warum das eine Endlosschleife gibt sehe ich nicht auf den ersten Blick, ist bei rekursiven Funktionen aber ein "beliebtes" Problem und nicht immer ganz einfach zu debuggen.

Aber abgesehen davon funktioniert das so nur mit nummerischen Schlüsseln, wenn Schlüssel fehlern können noch nichtmal damit.

// Funktion aufrufen:
$test = processArray($test);

Es gibt mehrere Möglichkeiten, ein Beispiel für PHP5:

  
<?php  
function array_htmlentities (&$item, $key) {  
        $item = htmlentities($item);  
}  
  
array_walk_recursive($test, 'array_htmlentities');  
?>  

Ein Beispiel für PHP4:

  
<?php  
function array_htmlentities(&$item, $key) {  
  if (is_array($item)) {  
   array_walk($item, 'array_htmlentities');  
  }  
  else {  
    $item = htmlentities($item);  
  }  
}  
  
array_walk($test, 'array_htmlentities');  
?>  

Oder ohne array_walk():

  
<?php  
function array_htmlentities(&$item){  
  if (is_array($item)) {  
    foreach ($item as $key => $value) {  
      $item[$key] = array_htmlentities($value);  
    }  
  }  
  else {  
    $item = htmlentities($item);  
  }  
  return $item;  
}  
  
array_htmlentities($test);  
?>  

Beachte dass hierbei jeweils keine Kopie von $test verwendet wird, sondern direkt die "originalen" Daten in $test verändert werden.

Grüße
Andreas

--
SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/