Du returnerar aldrig true från funktionen...
Jag har en rätt komplex fler-dimensionell array, $arr, som ev kan innehålla fel på vilken nivå som helst och på vilket index som helst. Eller ingenstans. En funktion går igenom arrayen och rapporterar ev funna fel i en matchande felarray. Om jag har ett fel i $arr[$i][$j] kommer felets art att beskrivas i $error[$i][$j] (så jag kan göra något åt det). Efter att $arr kollats vill jag skriva ut alla funna felbeskrivningar i $error. Dessutom vill jag att funktionen rapporterar true/false på om det fanns fel för att kunna köra vidare i skriptet bara om arrayen är rätt.
Ursprungligen hade jag en funktion som nästlade $errors maxdjup antal av foreach-satser på modellen:
function displayErrors(&$error) {
$ok = true;
foreach($error as $ix => $reason) {
if (!is_array($reason)) {
if ($reason !== "") {
printError("Error in pos $ix: $reason");
$ok = false;
}
}
else {
foreach ($error[$ix] as $sub => $subReason) {
if (!is_array($subReason)) {
if ($subReason !== "") {
printError("Error in pos [$ix][$sub]: $subReason");
$ok = false;
}
}
else {
foreach ($error[$ix][$sub] as $s => $what) {
if ($what !== "") {
printError("Error in pos [$ix][$sub][$s]: $what");
$ok = false;
}
}
} // else
}
} // else
}
return $ok;
}
$OK = displayErrors($error);
if ($OK) {
printToScreen("<p>Syntax OK!</p>");
}
else {
displayParsedCW($cw);
printToScreen("<p>Please fix the errors.</p>");
}
Men det känns som om det här borde kunna skrivas mycket vettigare rekursivt:
function displayErrors(&$error, $preIx = '') {
foreach($error as $ix => $reason) {
if (!is_array($reason)) {
if ($reason !== "") {
printError("Error in pos $preIx $ix: $reason");
return false;
}
}
else {
return displayErrors($reason, $preIx .= '[$ix]');
} // else
}
}
//Samma anrop
$OK = displayErrors($error);
if ($OK) {
printToScreen("<p>Syntax OK!</p>");
}
else {
displayParsedCW($cw);
printToScreen("<p>Please fix the errors.</p>");
}
Men jag får det inte att funka?
Med den ursprungliga funktionen leder inga fel till "Syntax OK", den rekursiva leder till Please fix the errors? Varför???