johny7: array_map für mehrere Arrays

Beitrag lesen

Moin allerseits,

ich habe jetzt eine Funktion programmiert, mit der man mehrere Arrays auf einmal durch eine callback-Funktion laufen lassen kann. Allerdings kann man an die callback-Funktion keine Parameter übergeben.

In einem konkreten Anwendungsfall würde das so aussehen:

  
$mirona = array();  
$mirona['gmbh'] = "mirona GmbH";  
$mirona['street'] = "Leichenweg 1a";  
$mirona['plz'] = "12345";  
$mirona['ort'] = "Berlin";  
  
$client = array();  
$client['firma'] = "Mein Würstchenbud KG";  
$client['person'] = "Max Mustermann";  
$client['street'] = "Lebendengasse 50";  
$client['plz'] = "42123";  
$client['ort'] = "Andersbrück";  
$client['no'] = "F73N39HOMN0";  
  
$rechnung = array();  
$rechnung['title'] = "Ihre Weinbestellung";  
$rechnung['no'] = "107748";  
  
array_map_m('utf8_decode','mirona','client','rechnung');  
  

Die Funktion sieht so aus:

  
function array_map_m($callback)  
{  
	$error1 = utf8_decode('Übergeben Sie der Funktion <strong>array_map_m()</strong> eine callback-Funktion und mindestens ein Array (nur den Namen als string) als Parameter.');  
	$error2 = utf8_decode('Die Funktion <strong>array_map_m()</strong> erwartet ab dem zweiten Parameter strings mit den Namen von globalen Arrays.');  
	if (func_num_args() < 2)  
	{  
		trigger_error($error1,E_USER_ERROR);  
	}  
	$args = func_get_args();  
	foreach ($args as $key => $arrayname)  
	{  
		if ($key == 0) continue 1;  
		eval('global $'.$arrayname.';');  
		eval('$array = $'.$arrayname.';');  
		if (!is_array($array)) trigger_error($error2,E_USER_ERROR);  
		eval ('$'.$arrayname.' = array_map("'.$callback.'",$'.$arrayname.');');  
	}  
}  

Kann man diesen Code noch optimieren? Insbesondere fände ich es schön, wenn man die Arrays normal und nicht als String übergeben könnte.

Grüße, JN

--
ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
http://www.johny7.de