Variablen außerhalb einer For-Each-Schleife benutzen

Papenburger

Erfahrenes Mitglied
Hallo,

ich habe eine frage. Folgenden Code benutze ich um eine Abfrage durchzuführen:
PHP:
function checkEntry($data)
{
    global $fehlercode;
    $readcfg=readCfg("service", $file_services, $spez=NULL, $encode=true);
    foreach($readcfg as $key=>$val)
    if($data[host_name]==$val[host_name]){$fehlercode="001";}
    elseif($data[service_description]==$val[service_description]){$fehlercode="002";}
    elseif($data[check_command]==$val[check_command]){$fehlercode="003";}
    elseif($data[max_check_attempts]==$val[max_check_attempts]){$fehlercode="004";}
    elseif($data[normal_check_interval]==$val[normal_check_interval]){$fehlercode="005";}
    elseif($data[retry_check_interval]==$val[retry_check_interval]){$fehlercode="006";}
    elseif($data[notification_interval]==$val[notification_interval]){$fehlercode="007";}
    elseif($data[contact_groups]==$val[contact_groups]){$fehlercode="008";}
    elseif($data[check_period]==$val[check_period]){$fehlercode="009";}
    elseif($data[notification_period]==$val[notification_period]){$fehlercode="010";}
    else{$fehlercode="000";}
    
    return($fehlercode);
}

Nun wird aber kein Wert zurückgegeben, warum und wie kann ich dies ändern?
 
Gib mal direkt vor der return-Anweisung mithilfe der var_dump()-Funktion den Wert der $fehlercode-Variable aus.
Ich hoffe du hast auch berücksichtigt, dass der Variablenwert bei jedem Durchlauf des foreach-Konstrukts überschrieben wird.
 
Dann steht da NULL drin. Nein leider nicht. Aber gut das du das sagst. Sobald er einen Fehler hat, soll er abbrechen...
 
Probier mal Folgendes:
PHP:
function checkEntry( $data )
{
	$retVal = '000';
	$errorMap = array(
		'host_name',
		'service_description',
		'check_command',
		'max_check_attempts',
		'normal_check_interval',
		'retry_check_interval',
		'notification_interval',
		'contact_groups',
		'check_period',
		'notification_period',
	);
	$config = readCfg("service", $file_services, NULL, true);
	foreach( $config as $val ) {
		foreach( $errorMap as $key => $name ) {
			if( $data[$name] == $val[$name] ) {
				$retVal = sprintf('%03u', $key+1);
				break 2;
			}
		}
	}
	return $retVal;
}
 
Danke aber da ist noch ein Fehler drin...

Er muss alle Werte gleich haben und nicht nur einen bis er abbricht... Also wenn W1-Datei mit Wert1-Formular und W2-D mit W2-F usw gleich sind dann soll er abbrechen.

Zudem gibt er trotzdem 000 aus obwohl in der Datei einträge vorhanden sind, die identisch mit denen aus dem Formular sind!
 
Zurück