ID:               16071
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Open
 Bug Type:         Arrays related
 Operating System: Win 2000
 PHP Version:      4.1.0
 New Comment:

Noticed the errors not in foreach, but in the pass. PHP kills the outer
array if theres only one element in it in a pass. Thats still a bug.


Previous Comments:
------------------------------------------------------------------------

[2002-03-14 10:10:06] [EMAIL PROTECTED]

I have code that traps all errors in a multidimentional array. The
array is structured so each row has a numerical key (ie $errors[] =
array('err_code'=>12, 'err_file'=>'happy.php');). You get the idea. For
error handling I have a function within a class that will accept an
error array and do output based on it. The function is as follows:

function pass_err_row($errors, $default_val=NULL, $override_val=NULL) {
// Throw errors based on err_file or default
        if (is_null($default_val))
{$default_val=PATH_TO_ROOT.LOC_ERROR."DEFAULT/errors.php";}
        if (!is_null($override_val)) {
                foreach($errors as $error_row) {
                        include($override_val);
                }
        }
        else {
                foreach($errors as $error_row) {
                        if ($error_row['handle_file']!==FALSE &&
$error_row['handle_file']!=="") {
                                include($error_row['handle_file']);
                        }
                        else {
                                include($default_val);
                        }
                }
        }
}

This works great as long as the array passed has more than one error
(each error being another array) in it. So if $errors[0] and $errors[1]
both exist, everything works. Where it gets really wacky is if only
$errors[0] exists then the foreach loops results in very strange
results. Each error array row in $errors consists of the following 8
indexes:
'err_no', 'err_text', 'err_file', 'err_line', 'system_err',
'handle_file', 'handle_code', 'severity'.
What happens is the foreach loops 8 times with $error_row being equal
not to the array in $errors[0] but being equal to an value in the sub
array. So the first result would be the equivalent of
$errors[0]['err_no']'s value. $errors is still an array, so why would
the for each instead use the sub array? very weird.

------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=16071&edit=1

Reply via email to