Mav: Probleme mit array_walk_recursive

Beitrag lesen

Hallo

function utf8_decode_array (&$value, &$key, $userdata = "") {
    if(is_array($value)) {
      array_walk_recursive2  ($value, 'utf8_decode_array');
    } else {
      $value = utf8_decode($value);
    }
}

$key und $userdata werden innerhalb deiner Funktion nicht weiter verwendet. Sofern es sich bei deinem hier geposteten Code nicht um eine abgespeckte Version handel, würde ich es einfach weg lassen. PHP stört sich übrigens nicht dran, wenn du mehr Parameter übergibst als erwartet (nur weniger dürfen es natürlich nicht sein). Gleiches gilt für deine If-Abfrage. Die macht bei dem vorliegenden Code einfach keinen Sinn, da du das ganze ja zum Anfang direkt array_walk_recursive2 aufrufst. Der Sinn hinter der If-Abfrage ist richtig und wichtig, dann sei aber auch so konsequent und verwende es auch wie geplant indem du deinen ersten Funktionsaufruf über utf8_decode_array machst.

if (!empty($userdata))
                {
                    $funcname($value, $key, $userdata);
                }
                else
                {
                    $funcname($value, $key);
                }

Üerflüssiges if, vorrausgesetzt du hast keine Funktionen, die als dritten Parameter zwingend NULL erwarten.

if ($value != $saved_value)
                {
                    $input[$key] = $value;
                }

Beim rekursiven Aufruf oben so schön gelöst und hier dann so falsch gemacht. Verwende besser gleich $funcname($index[$value], $key, $userdata). Dadurch sparst du dir das kopieren von $value und ein if.

array_walk_recursive2 ($this->varToImport, utf8_decode_array);

Wie schon oben gesagt: sei hier dann wenigstens so konsequent und verwende direkt utf8_decode_array. Zudem fehlen hier bei utf8_decode_array die Anführungszeichen, du willst ja schließlich einen String übergeben.

Hier nochmal alles schön zusammengefasst:

  
function utf8_decode_array (&$value) {  
  if(is_array($value)) {  
    array_walk_recursive2  ($value, 'utf8_decode_array');  
  } else {  
    $value = utf8_decode($value);  
  }  
}  
  
function array_walk_recursive2(&$input, $funcname, $userdata = "") {  
  if (!is_callable($funcname) || !is_array($input)) {  
    return false;  
  }  
  
  foreach($input as $key=>$value) {  
    if (is_array($value)) {  
      array_walk_recursive2($input[$key], $funcname, $userdata);  
    } else {  
      $funcname($input[$key], $key, $userdata); // was du bei der Zielfunktion mit $key anfangen willst versteh ich zwar nicht, aber du wirst schon wissen was du machst  
    }  
  }  
  return true;  
)  
utf8_decode_array($this->varToImport);  

_Wichtig:_ Dabei handelt es sich nur um optische Verbesserungen, der Fehler in deinem Code muss woanders liegen. Poste doch mal was $this->varToImport vor und nach dem Funktionsaufruf beinhaltet. Vieleicht hilft das ja irgendwie weiter.